学习lisp的时候,好记性不如烂笔头,烂笔头不如能教会别人,但只有你能用它来编程,才是真正的学会lisp。 这一章是给不会lisp或者对lisp一知半解的人阅读的。对lisp有较好的学习的人可以略读或者直接跳过这一章。阅读这一章感觉比较困 难的读者应该阅读一些lisp相关的其他读物,我在前言里有推荐。 计算机主要功能是计算。字符处理程序主要处理字符,计算器主要用作数字计算,虽然处理对象不同但规则是一样的。在这两种场景 中,我们提供输入信息(字符或者数字)和特定的处理程序(删除单词或对两个数字求和),然后获得处理结果(文档或者计算结果)。 我们把计算机内存中的所有东西都叫做可计算对象,或者对象。因为处理程序(删除与求和)也存放在计算机内存中,所有处理程序 也是对象。 通常,计算机用户和程序员的区别是用户提供输入或者数据(字符或者数字),而程序员定义处理程序和数据的结构。每一个新的对 象,不管是数据还是程序,都由底层提供的基本对象构成。坏消息是要获取底层定义的对象是非常乏味无聊的,好消息是我们定义的新对 象都可以给以后的对象使用。而且哪怕很复杂的程序也是由简单的程序和数据结构组成的。这本书包含了几个典型的人工智能问题,并且 详细的描述了这些问题是怎么被一步步拆分成可控的子问题,子问题又怎么用CommonLisp语言来描述的。比较理想的结果是读者通过学习 本书可以优雅的解决新的人工智能问题。 让我们来思考一个简单计算例子:两个数字的求和问题,比如2和2求和。如果我们手边有计算器,我们可以直接输入“2+2=”获得计 算结果。对于使用逆波兰式(后缀表达式)的计算器,我们只要输入“2 2 +”也可以获得计算结果。使用Lisp语言,就像计算器,用户 在lisp窗口输入一个表达式,就可以看到计算机对表达式的求值结果。这种交互模式和大多数的编程语言不一样。他们只能先编译然后才 能运行,获得结果。