Не хвостовые анонимные функции в Clojure

Вы хотите что-то как простое как

sleep(3);
24
задан laalto 12 April 2011 в 07:51
поделиться

2 ответа

Функциям можно дать имя для ссылки на себя, указав его между fn и arglist:

user> ((fn ! [n] (if (= 1 n) 1 (* n (! (dec n))))) 5)
120
44
ответ дан 28 November 2019 в 23:17
поделиться

Вот способ сохранить анонимность, в основном:

(((fn [!] (fn [n] (if (= 1 n) 1 (* n ((! !) (dec n)))))) 
  (fn [!] (fn [n] (if (= 1 n) 1 (* n ((! !) (dec n))))))) 
 5)

Это не совсем Y-комбинатор, но он содержит тот же бит самостоятельного применения, который позволяет Y делать свое дело. Имея копию всей функции в области видимости !, когда вам это нужно, вы всегда можете сделать еще одну копию.

4
ответ дан 28 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: