Tenir compte de la mise en œuvre suivante d'une fonction pour calculer factoriel: [1]Pourquoi 'let` ne fonctionnera-t-il pas pour nommer les procédures internes récursives?
(define fac-tail
(lambda (n)
(define fac-tail-helper
(lambda (n ac)
(if (= 0 n)
ac
(fac-tail-helper (- n 1) (* n ac)))))
(fac-tail-helper n 1)))
J'ai essayé de réécrire en utilisant let
pour la définir intérieure:
(define fac-tail-2
(lambda (n)
(let ((fac-tail-helper-2
(lambda (n ac)
(if (= 0 n)
ac
(fac-tail-helper-2 (- n 1) (* n ac))))))
(fac-tail-helper-2 n 1))))
Il n'y a pas d'erreur à define
temps, mais exécution dans les résultats:
#;> (fac-tail-2 4)
Error: undefined variable 'fac-tail-helper-2'.
{warning: printing of stack trace not supported}
Comment puis-je faire le travail de la version let
?
version Scheme est SISC v 1.16.6
[1] Sur la base de la version itérative de factorial
dans la section 1.2.1 de SICP http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.1
il est bon de savoir qu'il y a des gens qui piratent avec un système là-bas ... :) – galambalazs