首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两者(功能(lambda )和(lambda工作)

两者(功能(lambda )和(lambda工作)
EN

Stack Overflow用户
提问于 2019-11-02 08:10:57
回答 1查看 118关注 0票数 0

我正在用一个例子阅读elisp文档中的简单-Lambda

代码语言:javascript
复制
#+begin_src emacs-lisp :session sicp :lexical t
     (funcall (lambda (a b c) (+ a b c))
              1 (* 2 3) (- 5 4))
#+end_src

#+RESULTS:
: 8

下面的内容也同样有效。

代码语言:javascript
复制
#+begin_src emacs-lisp :session sicp :lexical t
((lambda (a b c) (+ a b c))
 1 (* 2 3) (- 5 4))
#+end_src

#+RESULTS:
: 8

这让我感到困惑,elisp是lisp-2风格的,所以当计算(lambda (a b c) (+ a b c))时,解释器将查看块的单元格以获得定义对象,因此文档的演示对于调用funcall是有意义的。

代码语言:javascript
复制
     (funcall (lambda (a b c) (+ a b c))
              1 (* 2 3) (- 5 4))

尽管如此,它的工作没有功能?

代码语言:javascript
复制
((lambda (a b c) (+ a b c))
 1 (* 2 3) (- 5 4))

此外,lambda不是自我评估的形式。

在Lisp代码中编写数字、字符、字符串甚至向量是很常见的,利用它们自我评估的事实。

EN

回答 1

Stack Overflow用户

发布于 2019-11-02 08:17:55

Elisp对于直接调用lambda表单有一个特例。

代码语言:javascript
复制
((lambda ...) ...)

正如您已经注意到的,这种方法在其他函数返回表单中不适用于更一般的情况。在这种情况下,它也是不可取的,所以最好不要使用它。

这个语法在(elisp)Function Indirection中有简要介绍。

下面的示例调用一个没有任何间接符号函数的函数,因为第一个元素是一个匿名Lisp函数,而不是一个符号。 ((lambda (arg) (erste arg))‘(12,3))⇒1 执行函数本身评估它的主体;在调用‘erste’时,这确实涉及符号函数间接性。 此表单很少使用,现在已不再推荐使用。相反,您应该将它写成: (funcall (lambda (arg) (erste arg))‘(12,3)) 或者只是 ((arg‘(12,3) (erste Arg)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58669345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档