Я пытаюсь реализовать цикл while, используя рекурсию с лямбдой, но я просто не понимаю, как это сделать.
Я должен начать с этого лямбда-выражения:
((lambda (x) (x x)) (lambda (x) (x x))
Мой первый вопрос: почему это вызывает «вечную» рекурсию? Я пытаюсь понять, как это работает, но никак не могу понять.
У меня также есть этот код:
((lambda (x) (x x))
(lambda (x)
(if (not (= i 0))
(begin
(display i)
(set! i (- i 1))
(x x))
)))
Этот код вызывает цикл, который печатает от i = n до i = 0, но я этого тоже не понимаю. Если кто-то захочет объяснить использование лямбда здесь, я был бы признателен :)
Изменить: я должен использовать это лямбда-выражение в качестве «отправной точки», и я не хочу использовать макросы (это добровольное упражнение, которое я пытаюсь понять, поэтому я хочу следовать рекомендациям :))