Вычтите n из каждого элемента последовательности Clojure - PullRequest
0 голосов
/ 12 ноября 2018

Я предполагаю, что это очень простой вопрос, но я не могу найти ответ в Интернете: как вы вычитаете n из каждого элемента последовательности Clojure? Например, вычтите 4 из каждого элемента (6 9 11) и получите (2 5 7)?

Я предполагаю, что это должно быть сделано с map, и я знаю, что для особого случая вычитания 1 я могу сделать (map dec (sequence)), но как мне сделать это для любого другого случая?

Что бы это ни стоило, в конце концов я понял, что (map - (map (partial - n) (sequence)) технически работает, но это явно не то, как это должно быть сделано.


Для любого, кто попадает сюда из поиска и имеет немного другую проблему: если вы хотите вычесть каждый элемент последовательности Clojure из n, вы можете сделать это с помощью (map (partial - n) (sequence))

Аналогично, для умножения каждого элемента последовательности Clojure на n вы можете сделать (map (partial * n) (sequence))

Для добавления n к каждому элементу последовательности Clojure (map (partial + n) (sequence))

Я нашел этот ответ в этих документах Clojure , поэтому я предполагаю, что это идиоматично, но, очевидно, я не могу за это поручиться сам.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Это может быть достигнуто с помощью карт.Clojure maps принимает функцию и список в качестве аргумента.Synatax:

(map (function) (seq))

test=> (map (fn[arg] (- arg 4) ) '(7 8 9) )
(3 4 5)
test=> (map (fn[arg] (- arg 4) ) [7 8 9] )
(3 4 5)

Карта также может принимать функцию в сокращенной записи.

(-% 4)

.Здесь% аргумент передан.По умолчанию первый аргумент.% 1, чтобы явно сказать первый аргумент

test=> (map #(- %1 4) [7 8 9])
(3 4 5)
test=> (map #(- % 4) [7 8 9])
(3 4 5)
0 голосов
/ 12 ноября 2018

Если вы ищете комбинаторное выражение для нужной вам функции, попробуйте (comp - (partial - 4)):

=> (map (comp - (partial - 4)) '(6 9 11))
(2 5 7)

Помните, что + и - являются просто обычными именованными функциями Clojure. Возможно, нужная вам функция не стоит называть, поэтому вы можете выразить ее прямо как #(- % 4) или (fn [n] (- n 4)), или как указано выше.

Стоит также помнить, что map ленив, поэтому может иметь дело с бесконечными последовательностями:

=> (take 10 (map (comp - (partial - 4)) (range)))
(-4 -3 -2 -1 0 1 2 3 4 5)
0 голосов
/ 12 ноября 2018

Здесь удобен литерал анонимной функции:

> (map #(- % 4) [6 9 11])
(2 5 7)

Форма #(- % 4) является сокращением для анонимной функции в

> (map (fn [x] (- x 4)) [6 9 11])
(2 5 7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...