Do any lisps have a s-expression as their head, e.g. ((f 2) 3 4)? If not, why?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 01:47:07

问题


Do any lisps support nested s-expression on their head? For example

((f 2) 3 4)

for which (f 2) presumably evaluates to a function/macro to apply on 3 4.

Is it possible to have a lisp supporting such a thing? Or are there technical limitations that prohibit this/make it impractical?


回答1:


In those Lisps, which have single namespace for variables and functions, your expression is valid. These are called Lisp-1. Scheme and Clojure are examples of such Lisps.

In those Lisps, which have separate namespaces for variables and functions, your expression would be (funcall (f 2) 3 4). These are called Lisp-2. Common Lisp and Emacs Lisp are examples of such Lisps.

In Lisp-2 every symbol has a value slot and a function slot. To call a function, that is stored in a value slot you need to use funcall keyword.

See more on this issue: http://www.dreamsongs.com/Separation.html

Edit: Thanks to Rainer Joswig i corrected the answer.




回答2:


For example in Common Lisp above is not valid. The syntax of Common Lisp does not generally allow lists as the head of a function call. You have to use FUNCALL to call a returned function value.

(funcall (f 2) 3 4)

In some other Lisp dialects it is allowed. Scheme is such a Lisp dialect. Scheme also evaluates the head of a function call expression.




回答3:


Lisp-1 lisps, such as Scheme, usually have all expressions of a function form evaluated, even the function itself.

Lisp-2 lisps, such as Common Lisp, usually have different behaviour for the function and for the arguments. Whereas the arguments are evaluated, the function is looked up. The common way to invoke an evaluated function is to use funcall or apply.

(funcall (f 2) 3 4)

In Common Lisp, you can use a lambda form, if you insist on evaluating something to a function in the operator:

((lambda (&rest args) (apply (f 2) args)) 3 4)


来源:https://stackoverflow.com/questions/12906945/do-any-lisps-have-a-s-expression-as-their-head-e-g-f-2-3-4-if-not-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!