一些LISP表达式自我评估(例子是MIT-Scheme REPL,尽管GNU Common Lisp同意):
1 ]=> 3
;Value: 3
并且处于正常状态。因此,可以适当地将表达式(例如(+ 2 1)
)的评估转换为正常形式。这太好了,因为我总是正式理解评价。
但是对于列表,我们遇到了麻烦:
1 ]=> (list 3 2)
; Value 16: (3 2)
1 ]=> (3 2)
;The object 3 is not applicable.
;To continue, call RESTART with an option number:
; (RESTART 2) => Specify a procedure to use in its place.
; (RESTART 1) => Return to read-eval-print level 1.
我是否正确地想到:
如果是这样,这与PLT中的形式主义(如抽象重写系统)有些不一致吗?有哪些替代形式可以在LISP中进行评估?
[0]或者更确切地说,"大多数着名的LISP",例如CL,Clojure和Scheme。但是我对那些鲜为人知的反例感兴趣!
答案 0 :(得分:2)
Lisp只能用少数原始运算符来定义。 How many primitives does it take to build a LISP machine? Ten, seven or five?所以你可以考虑在扩展到它们时得到的正常形式。
但Lisp并不是lambda演算。 What type of lambda calculus would Lisp loosely be an example of?
Lisp wasn't designed to be like the lambda calculus:
要使用函数作为参数,需要函数的符号,并且使用Church的lambda表示法似乎很自然。我不理解本书的其余部分,所以我没有试图实现他更通用的机制来定义函数 - Lisp的历史,J. McCarthy撰写的Stanford AI实验室备忘录,第6页