Решение Clojure Koan - но они часто лучше пишутся с использованием имен функций - PullRequest
0 голосов
/ 07 февраля 2019

Что нужно заполнить в пробелах, чтобы сделать пропуск?

(= 25 (__ square))

Этот вопрос от clojure koans

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Нам требуется функция, которая применительно к функции square дает 25.Ответ , данный Аланом Томпсоном ...

(fn [f] (f 5))

..., является ожидаемым.Но есть неисчислимые другие.Простейшей является функция, которая возвращает значение 25 независимо от ее аргумента:

(fn [_] 25)

Это достаточно распространенная конструкция, так что для этого есть основная функция constantly.Таким образом, мы можем сократить это до

(constantly 25)

. Мы можем преобразовать любую функцию, способную принять один аргумент, в решение, переопределив ее ответ на аргумент square:

(defn convert [g] (fn [x] (if (= x square) 25 (g x))))

Например,

=> ((convert +) square)
25
0 голосов
/ 07 февраля 2019

ИМХО, это глупый вопрос для Clojure Koans.Я ничего такого странного не помню, когда проходил Коаны в 2014 году.

Вот ответ:

(fn [f] (f 5))  ; missing piece

Вам также нужно знать, что функция square есть (fn [x] (* x x)) из предыдущего вопроса.Они должны определить функцию (очень тупой формат), как указано выше, и вызвать ее на месте.Я никогда не видел ничего похожего на этот ужасный формат в реальной жизни.

Для записи весь ответ будет выглядеть следующим образом:

(= 25 ( (fn [f] (f 5)) square))

, где предыдущая задача № 9 определяет:

(defn square [n] (* n n))

PS Если выеще не видел, пожалуйста, проверьте эти сайты для документации Clojure, примеров и справки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...