在阅读著名的SICP时,我发现作者似乎不太愿意在第3章中向Scheme介绍转让声明。
由于Scheme是我所知的第一门函数式编程语言,令我有些惊讶的是,有些函数式编程语言(当然不是Scheme)可以在没有赋值的情况下完成。
让我们使用本书提供的bank account
示例。如果没有赋值语句,该怎么办?如何更改balance
变量?我之所以这么问,是因为我知道那里有一些所谓的纯函数式语言,根据图灵完整理论,这也必须做到。
我学习了C,Java,Python,并在我编写的每个程序中大量使用赋值。因此,这确实是一次令人大开眼界的体验。我真的希望有人能简要解释一下这些函数式编程语言中如何避免赋值以及对这些语言有何深远影响(如果有的话)。
上面提到的示例在这里:
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
这改变了balance
通过set!
。在我看来,更改类成员非常像类方法balance
。
如我所说,我对函数式编程语言并不熟悉,因此,如果我对它们说错了,请随时指出。
set!
或其他以!
。结尾的函数。对此感到满意之后,向纯FP的过渡应该会更容易。