Как вы используете лямбда-выражение для создания рекурсивной функции в Scheme?

Я нахожусь в классе Scheme, и мне было любопытно написать рекурсивную функцию без использования define . Основная проблема, конечно же, в том, что вы не можете вызвать функцию внутри себя, если у нее нет имени.

Я нашел этот пример: это факториальный генератор, использующий только лямбда.

((lambda (x) (x x))
 (lambda (fact-gen)
   (lambda (n)
     (if (zero? n)
         1
         (* n ((fact-gen fact-gen) (sub1 n)))))))

Но я даже не могу понять первый вызов (lambda (x) (x x)): Что именно он делает? И где вы вводите значение, для которого хотите получить факториал?

Это не для класса, это просто из любопытства.

25
задан Will Ness 28 March 2018 в 23:47
поделиться