Lisp-Stat 翻译 —— 第三章 Lisp编程
第三章 Lisp编程 上一章我们使用了一些内建的Lisp函数和Lisp-Stat函数来运行一些有趣的运算。我们构建的表达式中的一些还是相当复杂的。当你发觉自己多次键入相同的表达式的时候(当然你使用的数据可能略微有些不同),你自然就想为这个表达式引入一些速记符,也就是说你想要定义自己的函数了。函数定义是Lisp编程的基础操作。第2.7节已经对这个主题给出了一个简单的介绍,现在是深入探索的时候了。在对如何定义一个Lisp函数进行一个简略的复习之后,我们将检验一些需要的技术以开发功能更强大的函数:状态求值、递归和迭代、局部变量、函数式数据、映射和赋值。 除了介绍定义函数的工具,本章也展示了一些Lisp编程常用编程技术和原则。尤其地,对于本章的大多数情况我都会使用函数式风格直至本章结束,目的是避免使用赋值方式改变变量的值(注:这里提到的原则也是函数式的目的之一,即函数可以使用外部变量,但在函数的整个执行过程中不对变量进行写操作,不破坏外部变量,这样的函数要非破坏性函数,反之叫破坏性函数,在《Practical Common Lisp》和《On Lisp》里你将接触大量的非破坏性函数和他们的破坏性版本,都有其各自的书写约定)。本章的开发严重依赖Abelson和Sussman的《 Scheme:计算机程序结构与解释》的 前两章。为了允许我们集中精力到编程过程本身