Я пытаюсь изменить список в схеме, и я пришел к следующему решению:
(define l (list 1 2 3 4))
(define (reverse lista)
(car (cons (reverse (cdr (cons 0 lista))) 0)))
(display (reverse l))
Хотя это работает, я действительно не понимаю, почему это работает.
В моей голове это будет оцениваться как серия вложенных минусов до минусов () (который является cdr списка с одним элементом).
Думаю, я не понимаю модель замещения, может кто-нибудь объяснить мне, почему она работает?
Наблюдения:
Предполагается работать только в невложенных списках.
Взято из SICP, упражнение 2.18.
Я знаю, что есть много подобных вопросов, но, насколько я видел, ни один из них не представил это решение.
Спасибо