Отображение последовательности с константой - PullRequest
6 голосов
/ 04 марта 2011

Если мне нужно предоставить постоянное значение для функции, которую я сопоставляю с элементами последовательности, есть ли лучший способ, чем то, что я делаю в настоящее время:

(map my-function my-sequence (cycle [my-constant-value]))

, где мой-constant-value является константой в том смысле, что она будет одинаковой для отображений поверх my-sequence, хотя сама она может быть результатом какой-то дальнейшей функции.У меня возникает ощущение, что позже я посмотрю на то, что я здесь задаю, и думаю, что это глупый вопрос, потому что, если бы я структурировал свой код по-другому, это не было бы проблемой, но хорошо, что это так!

Ответы [ 4 ]

9 голосов
/ 04 марта 2011

Я бы предпочел использовать частичную или анонимную функцию, как предполагает dbyrne, но другой инструмент, о котором следует знать, это repeat, который возвращает бесконечную последовательность любого значения, которое вы хотите:

(map + (range 4) (repeat 10))
=> (10 11 12 13)
7 голосов
/ 04 марта 2011

В вашем случае я бы использовал анонимную функцию:

(map #(my-function % my-constant-value) my-sequence)

Использование частично примененной функции - это еще один вариант, но он не имеет особого смысла в этом конкретном сценарии:

(map (partial my-function my-constant-value) my-sequence)

Вы (возможно?) Должны были бы переопределить my-функцию, чтобы принимать постоянное значение в качестве первого аргумента, и вам не нужно принимать переменное число аргументов, поэтому использование partial не покупает васчто-нибудь.

4 голосов
/ 05 марта 2011

Еще одним способом, который я нахожу иногда более читабельным, чем map, является макрос понимания списка for:

(for [x my-sequence]
   (my-function x my-constant-value))
1 голос
/ 04 марта 2011

да :) маленький драгоценный камень из "других полезных функций" раздела API constantly

(отобразить my-function my-sequence (постоянно my-constant-value))

шаблон (map-compines-data-new-new a-constant) довольно часто встречается в идоматическом замыкании. это относительно быстро, также с последовательностями и тому подобными.

РЕДАКТИРОВАТЬ: этот ответ неправильный, но constantly и остальные API других полезных функций настолько круты, что я все равно хотел бы оставить здесь ссылку на них.

...