一些LISP表达式求自己(的例子是MIT的方案REPL,虽然GNU Common Lisp的同意):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.
我是正确的思维是:
- (许多[0])的Lisp没有正常形态(非空)列表,并且
- (许多)LISP不具有评估正常化形式的属性吗?
如果是这样,这与PLT中的形式主义(如抽象重写系统)有何不同?什么替代形式主义在LISPs中获得评估?或者更准确地说,“大多数主要的LISP”,比如CL,Clojure和Scheme。[0]但我会对不那么有名的反例感兴趣!
没有“范式”在Lisp和评价不转换到正常形态。所有数据(除符号和列表之外)评估为themselve只是在后来的Lisp方言中定义。 Lisp不是lambda演算的实现。它使用特定类型的评估者。 –