任何lisps都有一个s表达式,例如((f 2)3 4)?如果没有,为什么?

spa*_*sue 7 lisp nested head s-expression lisp-2

任何lisps支持嵌套的s表达式吗?例如

((f 2) 3 4)
Run Code Online (Sandbox Code Playgroud)

对于这(f 2)大概计算一个函数/宏应用上3 4.

是否可以让lisp支持这样的事情?或者是否有技术限制禁止这种做法/使其不切实际?

Mir*_*lov 12

在那些具有变量和函数的单一命名空间的Lisp中,表达式是有效的.这些被称为Lisp-1.Scheme和Clojure就是这种Lisps的例子.

在那些具有变量和函数的单独命名空间的Lisp中,您的表达式将是(funcall (f 2) 3 4).这些被称为Lisp-2.Common Lisp和Emacs Lisp就是这样的Lisp的例子.

在Lisp-2中,每个符号都有一个值槽和一个功能槽.要调用存储在值槽中的函数,您需要使用funcall关键字.

有关此问题的更多信息,请访问:http://www.dreamsongs.com/Separation.html

编辑:感谢Rainer Joswig我纠正了答案.


Rai*_*wig 5

例如,上面的Common Lisp无效.Common Lisp的语法通常不允许列表作为函数调用的头部.您必须使用FUNCALL来调用返回的函数值.

(funcall (f 2) 3 4)
Run Code Online (Sandbox Code Playgroud)

在其他一些Lisp方言中,它是允许的.Scheme是一种Lisp方言.Scheme还评估函数调用表达式的头部.