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我纠正了答案.
例如,上面的Common Lisp无效.Common Lisp的语法通常不允许列表作为函数调用的头部.您必须使用FUNCALL
来调用返回的函数值.
(funcall (f 2) 3 4)
Run Code Online (Sandbox Code Playgroud)
在其他一些Lisp方言中,它是允许的.Scheme是一种Lisp方言.Scheme还评估函数调用表达式的头部.