2.学习函数式编程,从了解变量开始
Scheme与C系列语言的一个重大差异,在于对变量(variable)的理解和处理。在C系语言中,变量表示一个存储场所,是源代码中保存值的符号化地址。Scheme中,定义变量是为了拥有一个程序中方便使用的名字。该名字与其代表的软件实体形成关联、即形成名值对,称为绑定。
C系语言中变量x可以使用赋值表达式不停地给变量赋值,以至于一些自以为是的教材称“变量是其值可变的量”。C系语言中的名字/标识符,除了可以不停地被赋值的变量,另外的主要用途是命名常量和函数名。而这些命名常量和函数名,正是Scheme中需要定义变量的主要原因。对于绝大多数程序员而言,函数编程范式最表象的特点,就是变量的值尽可能不要变化。
★函数式编程的重要特性:数据的不变性(immutabledata/不可变数据)。
正如Java中不变类的优点一样,函数编程语言中更为基础的不可变数据,使得它在多核时代越来越受到宠爱,因为各个线程之间不需要同步/互斥或加锁,极大方便了并行程序开发。
赋值表达式的副作用在函数式编程语言被格外警惕——不到万不得已不使用赋值表达式。为此,Scheme将赋值表达式设定为远远较等号麻烦得多的书写形式,其一般格式为: