Больно спрашивать об этом здесь. Это действительно так. Каждый раз, когда я тщетно искал ответы на мои проблемы, я вижу это. Осторожно. Stack Overflow.Стиль продолжения прохождения делает хвост рекурсивным?
В любом случае, какое-то адское влияние заставило меня попытаться решить Башни Ханоя. Мое первое решение было неполным, так как это привело к memory error, если работать слишком много дисков:
(define hanoi
(lambda (n from to other)
(cond ((< n 0)
(error `(Error! Number of disks ,n cannot be less than 0!)))
((= n 0)
'())
(else
(append (hanoi (- n 1)
from
other
to)
`((,from ,to))
(hanoi (- n 1)
other
to
from))))))
Я где-то читал, что продолжение-прохождение стиль позволит решить эту проблему. Тем не менее, это didn't help either:
(define hanoi_cps
(lambda (n from to other c)
(cond ((< n 0)
(error `(Error! Number of disks ,n cannot be less than 0!)))
((= n 0)
(c '()))
(else
(hanoi_cps (- n 1)
from
other
to
(lambda (x)
((lambda (w)
(w `((,from ,to))))
(lambda (y)
(hanoi_cps (- n 1)
other
to
from
(lambda (z)
(c (append x y z))))))))))))
Сколько дисков слишком много дисков, из любопытства? – dyoo
@dyoo для 'hanoi': 19 дисков; для 'hanoi_cps': 15 дисков – ikdc