Sto iniziando a imparare Lisp, usando il libro SICP. Gli autori menzionano che una procedura (cioè la funzione) può essere ricorsiva o iterativa. Inoltre, il processo che tali procedure genereranno sarà anche ricorsivo o iterativo e, sorprendentemente, una procedura ricorsiva a volte può generare un processo iterativo.
L'esempio fornito è la procedura fattoriale, che è una procedura ricorsiva, ma che genera un processo iterativo:
(define factorial n)
(iter 1 1 n))
(define (iter product counter max-count)
(if (> counter max-count)
product
(iter (* counter product)
(+ counter 1)
max-count)))
Ed ecco una citazione dal libro:
One reason that the distinction between process and procedure may be confusing is that most implementations of common languages (including Ada, Pascal, and C) are designed in such a way that the interpretation of any recursive procedure consumes an amount of memory that grows with the number of procedure calls, even when the process described is, in principle, iterative. The implementation of Scheme we shall consider does not share this defect. It will execute an iterative process in constant space, even if the iterative process is described by a recursive procedure.
Domanda : ho compreso i principi coinvolti (cioè il cosa) ma non capisco ancora come l'interprete / compilatore Lisp genererà un processo iterativo da una funzione ricorsiva, potendo calcolarlo usando lo spazio costante e perché molte altre lingue non sono in grado di farlo.