En lisant le célèbre SICP, j'ai trouvé que les auteurs semblent plutôt réticents à introduire la déclaration d'affectation dans Scheme au chapitre 3. J'ai lu le texte et je comprends en quelque sorte pourquoi ils le ressentent.
Comme Scheme est le premier langage de programmation fonctionnel sur lequel je connaisse quelque chose, je suis un peu surpris qu'il existe des langages de programmation fonctionnels (pas Scheme bien sûr) qui peuvent se passer d'affectations.
Prenons l'exemple du livre, l' bank account
exemple. S'il n'y a pas de déclaration d'affectation, comment faire? Comment changer la balance
variable? Je le demande parce que je sais qu'il existe des soi-disant langages fonctionnels purs et que, selon la théorie complète de Turing, cela peut aussi être fait.
J'ai appris le C, Java, Python et j'utilise beaucoup de devoirs dans chaque programme que j'ai écrit. C'est donc vraiment une expérience révélatrice. J'espère vraiment que quelqu'un pourra expliquer brièvement comment les affectations sont évitées dans ces langages de programmation fonctionnels et quel impact profond (le cas échéant) cela a sur ces langages.
L'exemple mentionné ci-dessus est ici:
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
Cela a changé le balance
by set!
. Pour moi, cela ressemble beaucoup à une méthode de classe pour changer le membre de la classe balance
.
Comme je l'ai dit, je ne connais pas les langages de programmation fonctionnels, donc si je dis quelque chose de mal à leur sujet, n'hésitez pas à le signaler.
set!
ou d'autres fonctions se terminant par a!
. Une fois que vous êtes à l'aise avec cela, la transition vers la PF pure devrait être plus facile.