Отображение логического значения в список в clojure

#clojure #functional-programming

#clojure #функциональное программирование

Вопрос:

Я пытаюсь получить список для вычисления значения true / false по определенному числу. Когда я определяю функцию, clojure определяет ее нормально. Но он не делает то, что я хочу сделать. Просто изучаю clojure… так что я пока не очень разбираюсь в синтаксисе … извиняюсь, если это вопрос новичка.

В идеале он должен принимать список типа (список 9 0 3) и оценивать его как (список true false true)

 (defn myfunc [lst](map (> x 1) lst))
  

Комментарии:

1. «Но он не делает то, что я хочу сделать» — не самое подходящее описание ошибки. Пожалуйста, убедитесь, что в дальнейших вопросах также указано сообщение об ошибке или о том, что результат не соответствует вашим ожиданиям.

Ответ №1:

Вот правильный синтаксис:

 (defn greater-than-one?
  [x]
  (< 1 x))
  

а затем используйте его:

 (mapv greater-than-one? (list 9 0 3)) => [true false true]
  

В вашем исходном формате вы также могли бы решить его следующим образом:

 (defn myfunc [lst]
  (map #(> % 1) lst))
  

и используйте его:

 (myfunc (list 9 0 3)) => (true false true)
  

Вы можете найти этот проект шаблона полезным для начала работы. Пожалуйста, не забудьте также просмотреть список документации.

Комментарии:

1. Круто! Спасибо! Также: как бы вы возводили список в степень?

2. @bl4ckh4t (map #(Math / exp %) coll)

3. Итак, скажем, я хотел, чтобы процедура принимала список (l) и целое число (n) и возвращала последовательность l в степень n, я мог бы сделать (defn myfunc [x n] (map #(Math / exp % n) x)) ?? Но подача этого x = (список ‘a ‘b) и n = 2 возвращает ##NaN ##NaN