2022-08-26 07:36
空表是一个列表.
quote形式就像是自然语言中的引用现象, 比如apple是一种水果, 而"apple"由5个字母组成. 对于(quote <datum>)求值得到<datum>.
但是, 读者应该注意到, ()并不是一个合法的句法. 尽管()也不会引起什么歧义, 但是Scheme就被设计成这样了.
quote形式是如此频繁地出现, 以至于存在一种很特殊的句法, 或许应该说这是词法层面的.
'()就相当于(quote ()), 实际上Scheme系统会将前者转换为后者.
对于列表lst和任意的Scheme值x, (cons x lst)也是一个列表, 而且它是将x加入lst的首部的列表.
也就是说, 列表其实就是用序对串在一起的对象, 只不过最后要以空表结尾.
显然, 我们可以用car取得列表的首元素, cdr取得列表除首元素剩余的列表. 将car和cdr应用于空表会引起异常. (另一种Lisp方言Common Lisp中就不会, 而是返回空表.)
Scheme内置的函数list可以用来方便地构造列表.
当然, 使用quote形式更加方便.
但实际上quote形式更加一般, 可以引用各种各样的东西.
这里我们隐式地引入了类型为符号的对象.
显然, 列表可以用来编码各种各样的信息, 比如用来表示程序文本. 将其作为知识表示的手段, 是古典人工智能里最根本性的想法之一.