Ao ler o famoso SICP, achei os autores relutantes em apresentar a declaração de atribuição a Scheme no capítulo 3. Li o texto e meio que entendo por que eles sentem isso.
Como o Scheme é a primeira linguagem de programação funcional de que conheço alguma coisa, fico surpreso que haja algumas linguagens de programação funcionais (não é claro que Scheme) possam fazer sem atribuições.
Vamos usar o exemplo que o livro oferece, o bank account
exemplo. Se não houver declaração de atribuição, como isso pode ser feito? Como alterar a balance
variável? Eu pergunto isso porque sei que existem algumas chamadas linguagens funcionais puras por aí e, de acordo com a teoria completa de Turing, isso também pode ser feito.
Aprendi C, Java, Python e uso muito as atribuições em todos os programas que escrevi. Portanto, é realmente uma experiência reveladora. Eu realmente espero que alguém possa explicar brevemente como as atribuições são evitadas nessas linguagens de programação funcionais e que impacto profundo (se houver) sobre essas linguagens.
O exemplo mencionado acima está aqui:
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
Isso mudou o balance
por set!
. Para mim, parece um método de classe para alterar o membro da classe balance
.
Como eu disse, não estou familiarizado com linguagens de programação funcionais; portanto, se eu disse algo errado sobre elas, sinta-se à vontade para apontar.
set!
vários programas de esquema sem usar ou outras funções que terminam com um!
. Quando estiver satisfeito com isso, a transição para o FP puro deve ser mais fácil.