Опитвам се да конструирам рекурсивна процедура от друга процедура, която вече съм конструирал. Но не съм напълно наясно как трябва да мисля. Давам ви два примера, където първият е моята процедура, която не е опашка рекурсивна, а вторият е моят „опит“ да направя опашно рекурсивна процедура. Да... опит :) Ще се радвам на всякакви съвети как да конструирам опашни рекурсивни процедури, как да започна, да мисля и каквото и да било.
Редактиране: Първият работи точно както искам. (define square (lambda (x) (* x x)))
(do-to-each square '(1 2 3))
трябва да постави на квадрат всяко число, което прави списъка (1 4 9)
(define do-to-each
(lambda (proc lst)
(if (list-empty? lst)
(list-create)
(list-insert (proc (list-first lst)) (do-to-each proc (list-rest lst))))))
(define do-to-each-tail
(lambda (proc lst)
(define loop
(lambda (n result)
(if (= n 1)
(list result)
(if (eq? (length result) 1)
(car result)
(loop (- n 1) (cons (car result) (do-to-each-tail proc (cdr result))))))))
(loop (length lst) lst)))