2014-10-24 4 views
2

У меня есть вложенный вектор векторов, например [[1 2 3] [4 5 6] [7 8 9]], и я хочу увеличить значения каждого под-вектора, а затем найти максимальное количество каждого под-вектора. Используемая формулировка:Состав и частичный состав функций в Clojure

(map (comp (partial apply max) (partial map inc)) [[1 2 3] [4 5 6] [7 8 9]]) 

Есть ли лучший способ?

ответ

1

на основе @xsc's answer, но соблюдая порядок операций ...

(map #(->> % (map inc) (apply max)) [[1 2 3] [4 5 6] [7 8 9]]) 
;(4 7 10) 
1

Для достижения вашей цели, вы можете объединить max/inc и сохранить один вызов map:

(map (comp inC#(apply max %)) [[1 2 3] [4 5 6] [7 8 9]]) 
;; => (4 7 10) 

Но это лишь незначительное улучшение и фактически инвертирует порядок операций. Однако может быть более читаемым.

+2

... или '(карта # (- >>% (применяется макс), вкл) [[1 2 3] [4 5 6] [7 8 9]]) ' – Thumbnail

+0

Инвертирование порядка операций является проблемой печально - это упрощенная версия проблемы, где операция inc может варьироваться в зависимости от контекста. Я слишком упростил его, извините! На практике я делаю «(частичная карта: ключевое слово)», чтобы сначала получить требуемое значение, а не прямую 'inc' –

+0

@OliverMooney ... Затем' (map # (- >>% (map inc) (apply max)) [[1 2 3] [4 5 6] [7 8 9]]) ' – Thumbnail