有没有Lisp支持在其头部嵌套s表达式?例如:
((f 2) 3 4)
(f 2)
可能会被计算为一个在 3 4
上应用的函数/宏。
是否有可能有一种支持这种功能的lisp语言?或者有没有技术上的限制使其不可行?
((f 2) 3 4)
(f 2)
可能会被计算为一个在 3 4
上应用的函数/宏。
是否有可能有一种支持这种功能的lisp语言?或者有没有技术上的限制使其不可行?
(funcall (f 2) 3 4)
。这些被称为Lisp-2。Common Lisp和Emacs Lisp是此类Lisp的示例。funcall
关键字。FUNCALL
来调用返回的函数值。(funcall (f 2) 3 4)
在其他一些Lisp方言中是允许的。Scheme是这样的一种Lisp方言。Scheme还会评估函数调用表达式的头部。
Lisp-1 Lisp,例如Scheme,通常会对函数形式的所有表达式进行评估,甚至包括函数本身。
Lisp-2 Lisp,例如Common Lisp,通常对函数和参数有不同的行为。虽然参数会被评估,但函数会被查找。调用已评估函数的常见方法是使用funcall
或apply
。
(funcall (f 2) 3 4)
((lambda (&rest args) (apply (f 2) args)) 3 4)