Emacs Lisp:(函数(lambda ...))和(lambda ...)之间的区别?

2023-11-24

有什么区别

(function (lambda ...))

and

(lambda ...) 

and

'(lambda ...)

?

在很多情况下,这三个似乎可以互换。


它们非常可以互换。答案是function enableslambda 要进行字节编译,而其他两个则不需要(并且是等效的)。Note:这并不意味着function实际上对 lambda 进行了字节编译。

How might one figure that out? A little Emacs lisp introspection provides some clues. To start: C-h f function RET:

函数是 'C 中的特殊形式 源代码'。

(函数参数)

类似于“quote”,但首选 对象是函数。以字节为单位 编译,“功能”导致其 要编译的参数。 '引用' 不可以这样做。

Ok, so that's the difference between (function (lambda ...)) and '(lambda ...), the first tells the byte compiler that it may safely compile the expression. Whereas the 'ed expressions may not necessarily be compiled (for they might just be a list of numbers.

What about just the bare (lambda ...)? C-h f lambda RET shows:

lambda 是 `subr.el' 中的一个 Lisp 宏。

(lambda args [文档字符串] [交互] 身体)

返回 lambda 表达式。一个电话 形式(lambda args 文档字符串 交互体)是自引用的;这 计算 lambda 的结果 表达式就是表达式本身。 那么 lambda 表达式可以是 被视为函数,即存储为 符号的函数值,传递 'funcall' 或 'mapcar' 等。

所以,(lambda ...) and '(lambda ...)是等价的。

另外,还有一个记号#'(lambda ...),这是语法糖(function (lambda ...)).

有关 Emacs lisp 中函数的更多信息,请阅读功能信息页面.

为了检查所有这些,您可以在 *scratch* 缓冲区中输入以下内容并计算表达式:

(caddr '(lambda (x) (+ x x)))
(+ x x)

(caddr (lambda (x) (+ x x)))
(+ x x)

(caddr (function (lambda (x) (+ x x))))
(+ x x)

(equal '(lambda (x) (+ x x))
       (function (lambda (x) (+ x x))))
t

(equal '(lambda (x) (+ x x))
       (lambda (x) (+ x x)))
t

因此,使用 lambda 的所有三种变体都只是构建可用作函数的列表(其中之一可以是字节编译的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Emacs Lisp:(函数(lambda ...))和(lambda ...)之间的区别? 的相关文章

随机推荐

  • 多线程还是尽可能少的线程?

    作为一个业余项目 我目前正在为我曾经玩过的一款古老游戏编写服务器 我试图使服务器尽可能松散耦合 但我想知道对于多线程来说什么是好的设计决策 目前我有以下操作顺序 启动 创建 gt 服务器 监听客户端 创建 gt 客户端 监听命令并发送周期数
  • 如何使用用户的默认电子邮件客户端弹出撰写/创建邮件对话框?

    用例很简单 在某个时间点 我需要能够向用户展示他熟悉的撰写电子邮件对话框 Outlook 或其他 发件人 收件人 主题 等字段已填充了某些应用程序确定的值 该电子邮件还会附带一个附件 除非用户明确同意 否则不应发送邮件 我在 VB6 时代做
  • LINQ 中的升序/降序 - 可以通过参数更改顺序吗?

    我有一个给出参数 bool sortAscending 的方法 现在我想使用 LINQ 根据此参数创建排序列表 然后我得到了这个 var ascendingQuery from data in dataList orderby data P
  • c++ 从 hbitmap 获取原始像素数据

    我对使用 p invoke 调用相当陌生 想知道是否有人可以指导我如何从 hbitmap 检索原始像素数据 unsigned char 这是我的场景 我正在加载一个 NET 位图对象在C 侧并将其 IntPtr 发送到我的非托管 C 方法
  • 如何模拟用 jest.mock 模拟的类的实例方法?

    如何模拟正在模拟的类的实例方法jest mock 例如 一个类Logger被嘲笑 import Person from Person import Logger from Logger jest mock Logger describe P
  • mocha / babel 如何动态转译我的测试代码?

    我的问题不是为什么有些东西不起作用 而是为什么它起作用 是的 我有一个小NodeJS 命令行工具 其中包含 NodeJS 尚不支持开箱即用的功能 最值得注意的是 import声明 String includes 因此 为了交付 构建 我转译
  • 修改Windows的MBR

    我需要修改 Windows 的 MBR 并且我真的很想在 Windows 上执行此操作 这是我的问题 我知道我可以通过调用 CreateFile 来获取物理设备的句柄 MBR 是否始终位于 PHYSICALDRIVE0 上 另外 我仍在学习
  • 重新安装 Mac OS X 后 npm 无法工作

    我不得不在我的笔记本电脑上重新安装 Mac OS X Mavericks 现在 npm 不起作用了 但是 node 仍在笔记本电脑上 npm 位于 PATH 中 christohersmbp3 angular phonecat christ
  • 用户单击主页按钮后将应用程序置于最前面

    我的申请在运行模式 前台 用户单击主页按钮 这会将应用程序置于背景 并且仍在运行 我的应用程序中有警报功能 该功能会启动 我想要的是 当我的闹钟响起时 我想将我的后台运行应用程序置于前台 并从它所处的最后状态开始
  • 循环内的 try- except

    我需要调用方法f 如果它引发IOError 我需要再次调用它 重试 最多执行三次 我需要记录任何其他异常 并且需要记录所有重试 下面的代码可以做到这一点 但看起来很丑 请帮助我让它变得优雅和Pythonic 我正在使用Python 2 7
  • 在绘图文本中使用表达式 - 打印变量的值而不是其名称

    我正在尝试获得一个标签 其中包含指数 这是我的代码 vall format cor x y cor x y digits 3 eq lt expression paste R 2 vall sep text legend x legend
  • C:为什么用 %s 打印空字符会打印“(null)”?

    为什么用 s 打印 null char 0 0 实际上会打印 null 字符串 就像这段代码 char null byte 0 printf null byte s n null byte 印刷 null byte null 甚至在 Val
  • BindingExpression 路径错误:在“对象”上找不到属性

    我已经在输出窗口中出现的这个错误上搜索了几个小时 我对 WPF 中的绑定还很陌生 所以我确信我缺少一些东西 错误全文 每个绑定路径都有一个 都与此类似 System Windows Data 错误 39 BindingExpression
  • IOS:可以在每个角上使用不同的值来舍入半径

    我想圆润我的UIView具有这样的价值 top left radius 20 bottom right radius 5 bottom left radius 5 and top right radius 10 For rounder UI
  • 与 ItemControl 的双向绑定

    我正在尝试编写一个具有 ItemsControl 的用户控件 其中的 ItemsTemplate 包含一个允许 TwoWay 绑定的 TextBox 但是 我一定在代码中的某个地方犯了错误 因为绑定似乎仅在 Mode OneWay 时才起作
  • 在 unix 中使用 shell 脚本从文件名中提取日期

    我正在研究 shell 脚本 我想从文件名中提取日期 文件名是 abcd 2014 05 20 tar gz 我想从中提取日期 2014 05 20 echo abcd 2014 05 20 tar gz grep Eo digit 4 d
  • 如何仅使用 OpenCV HighGui 制作一个简单的一键窗口?

    我正在使用 OpenCV 开发一个游戏项目 现在我必须制作一个简单的 GUI 一个带有一个按钮的窗口 仅使用 HighGui 我不确定 但我想我应该使用这样的东西 cvNamedWindow NameWindow CV WINDOW AUT
  • TCPDF - 标题图像仅显示在第一页上

    我正在使用 TCPDF 生成 2 页 pdf 文档 我已向文档添加了页眉和页脚 页眉和页脚的文本部分在每个页面上正确显示 但是当我在页眉中包含图像徽标时 它仅显示在第一页上 public function Header this gt Im
  • 无法在 Ubuntu 中升级 Android studio

    我目前正在使用 android studio 2 0 但想将其更新到 2 1 因为它已在稳定频道上发布 现在 当我按下 更新并重新启动 按钮时 它会下载补丁 然后退出 但不会自行重新启动 因此 我手动启动它以检查更新是否成功 但它仍然显示
  • Emacs Lisp:(函数(lambda ...))和(lambda ...)之间的区别?

    有什么区别 function lambda and lambda and lambda 在很多情况下 这三个似乎可以互换 它们非常可以互换 答案是function enableslambda 要进行字节编译 而其他两个则不需要 并且是等效的