2013-11-21 2 views
0

Я просто пытаюсь переименовать функцию карты в Clojure, чтобы получить лучшую экспозицию для произвольных входных данных. Функция, которую я написал, имеет проблемы с количеством передаваемых аргументов. А именно,Расширение функции карты для обработки вложенных сегментов

(defn new-map [f [& x]] 
     (map f x)) 

Кроме того, конечной целью является написание функции отображения, который может обрабатывать вложенные входы:

Вход 1: [вкл [[1 2 3] [4 5]] [2 1] ]

Выход 1: [[1 2 3] [5 5]], где inc - определенная функция f, [[1 2 3] [4 5]] - массив, а [2 1] выбирает вторую строка первого элемента массива.

вход 2: [вкл [[1 2 3] [4 5] [6] [7]] [[1 1] [2 2] [3]]]

Выход 2: [[2 2 3] [4 6] [7] [7]]

ответ

1

это звучит, как вы хотите reduce с update-in

т.е.

(defn new-map [f nested-vecs indices] 
    (reduce (fn [nv idxs] (update-in nv idxs f)) 
      nested-vecs 
      indices)) 

;; I changed your inputs. Remember that indices start from 0 
(new-map inc [[1 2 3] [4 5] [6] [7]] [[0 0] [1 1] [2 0]]) 

; => [[2 2 3] [4 6] [7] [7]] 

 Смежные вопросы

  • Нет связанных вопросов^_^