Вопрос заключается не в том, чтобы использовать let
, но будет ли определить вашу add2
функцию непосредственно или использовать функцию решения-функции , make-adder
, чтобы сделать это.
Ваша функция решений-функция
(defn make-adder [x]
(let [y x]
(fn [z] (+ y z))))
Как @user1571406 словам, let
не делает ничего полезного здесь, и лучше опустить, давая
(defn make-adder [x]
(fn [z] (+ x z)))
... что гораздо проще читать. Мы можем видеть, что, учитывая число, то оно возвращает функцию, которая добавляет, что число к тому, что оно представлено с:
((make-adder 2) 4)
;6
Давать (make-adder 2)
имя просто сбивает с толку.
Определение его явно, безымянная функция, которая добавляет 2
является
(fn [z] (+ 2 z))
Применяя его к 4
:
((fn [z] (+ 2 z)) 4)
;6
Здесь есть две вещи - функция, которая генерирует функции, а также использует let. В последнем примере вырезаются оба. – pete23