3.3 列表和递归
不可变的函数式数据类型,元组是一个很好的例子,但许多函数式数据类型,还有另外的属性值得在这一章讨论:递归(recursion)。有一个经典的编程笑话:递归的定义是什么?“递归,参见递归。”
递归在函数编程中有不同的形式,它可以出现在类型的构造中,如列表。表示函数式列表类型,既可以为空,也可以由元素和列表组合而成。可以看到,我们描述的列表类型,递归用在了定义中。递归的第二种形式可能更加广为人知,即用于写递归函数。我们先看一下第二种形式的示例,然后再演示第一种形式的列表。