Emacs lisp中引用的符号的确切含义是什么?

Emacs lisp中引用的符号的确切含义是什么?,emacs,elisp,common-lisp,Emacs,Elisp,Common Lisp,我发现前两个表达式在emacs中的结果是相同的。 虽然我知道这不是一个真正的财产例子来说明我的问题 你能解释一下引用符号的确切含义吗? 引用的符号返回什么?变量名或其他内容的字符串表示形式?引用只会关闭对所引用表单的求值。具体的作用将根据您使用的lisp和引用的内容而有所不同 评估符号通常包括查找该符号的值。引用符号将关闭该查找,这意味着返回符号本身。打印符号会打印符号的名称,这就是为什么两个示例的输出相同。引用只会关闭对所引用表单的求值。具体的作用将根据您使用的lisp和引用的内容而有所不同

我发现前两个表达式在emacs中的结果是相同的。 虽然我知道这不是一个真正的财产例子来说明我的问题

你能解释一下引用符号的确切含义吗?
引用的符号返回什么?变量名或其他内容的字符串表示形式?

引用只会关闭对所引用表单的求值。具体的作用将根据您使用的lisp和引用的内容而有所不同


评估符号通常包括查找该符号的值。引用符号将关闭该查找,这意味着返回符号本身。打印符号会打印符号的名称,这就是为什么两个示例的输出相同。

引用只会关闭对所引用表单的求值。具体的作用将根据您使用的lisp和引用的内容而有所不同


评估符号通常包括查找该符号的值。引用符号将关闭该查找,这意味着返回符号本身。打印符号会打印符号的名称,这就是为什么两个示例的输出相同。

Lisp中的符号可以用于多种用途,包括但不限于:

一种简单的数据类型,用于表示其他简单数据类型不能或不应该表示的任何原子,因此类似于C族语言中的枚举。例如,函数MakeWidget可能采用参数大小,其可能值为“小”、“中”和“大”。以这种方式使用的符号不需要声明,尽管有一些简单的方法可以在需要时限制值的范围。 变量名 函数名 带引号的符号返回符号本身

可以打印符号,正如您所看到的,可以像字符串一样打印符号

那么,既然可以轻松地使用字符串,为什么还要使用符号呢

符号的名称不会更改,因此它使用的内存比字符串少 符号可用于存储对要以非平凡方式调用的函数的引用。典型示例是将函数应用于列表-例如,如果square是正确定义的函数,则: 应用“方形”1 2 3 4

返回

(message "%s" 'abc)
(message "%s" "abc")

这里没有提到符号的其他用途,但希望这能给您一个良好的开端。

Lisp中的符号可以用于多种用途,包括但不限于:

一种简单的数据类型,用于表示其他简单数据类型不能或不应该表示的任何原子,因此类似于C族语言中的枚举。例如,函数MakeWidget可能采用参数大小,其可能值为“小”、“中”和“大”。以这种方式使用的符号不需要声明,尽管有一些简单的方法可以在需要时限制值的范围。 变量名 函数名 带引号的符号返回符号本身

可以打印符号,正如您所看到的,可以像字符串一样打印符号

那么,既然可以轻松地使用字符串,为什么还要使用符号呢

符号的名称不会更改,因此它使用的内存比字符串少 符号可用于存储对要以非平凡方式调用的函数的引用。典型示例是将函数应用于列表-例如,如果square是正确定义的函数,则: 应用“方形”1 2 3 4

返回

(message "%s" 'abc)
(message "%s" "abc")

这里没有提到符号的其他用途,但希望这能给您一个良好的开端。

最简单的答案是:符号在系统中是唯一的,而字符串不是唯一的。 以下测试将明确这一点:

(1 4 9 16)

一个符号在系统中只被拘留一次。所有进一步的引用都指向同一对象。换句话说,一个符号是一个单例,比较两个符号只是比较指针的问题。所以速度更快。字符串的情况并非如此。在上面的示例中,字符串abc的两个实例是两个对象。

最简单的答案是:符号在系统中是唯一的,而字符串不是唯一的。 以下测试将明确这一点:

(1 4 9 16)

一个符号在系统中只被拘留一次。所有进一步的引用都指向同一对象。换句话说,一个符号是一个单例,比较两个符号只是比较指针的问题。所以速度更快。字符串的情况并非如此。在上面的示例中,字符串abc的两个实例是两个对象。

带引号的符号计算为符号本身


一个符号可能有一个名称,还有一个值。如果打印符号,将打印其名称。

引用的符号将计算为符号本身


一个符号可能有一个名称,还有一个值。如果打印符号,则会打印其名称。

要添加到上面所写的内容:

字符串和符号都可以是唯一的。上面所说的是不正确的 . 它们是具有身份的对象

setq foo abc

赛特巴福

均富酒吧

变量foo和bar的值是相同的唯一字符串

eq abc为非nil的原因是Lisp读取器从这两个文本字符串表达式生成两个不同的字符串对象。另一方面,当Lisp阅读器只遇到abc时,它会将其作为符号名进行读取。正如上面正确所说,实习生第一次使用该名称创建符号,然后查找符号名称

Wrt评估:

字符串是自引用的;也就是说,他们对自己进行评估。大多数符号不是t,而nil是显著的例外

在求值过程中,如果符号在上下文中用作函数,则查找符号以获取其关联函数;如果符号在上下文中用作变量,则查找符号以获取其关联值

在abc xyz中:

符号abc在上下文中用作函数,因此其函数将被查找并用于其函数单元格的值

符号xyz在上下文中用作变量,因此会查找其变量值并使用其变量单元格的值

注意,Emacs Lisp中的符号有两个单元格或含义:a作为函数,b作为变量。给定的符号可能未定义为变量或函数,也可能同时具有这两种定义


最后,就您的意思而言,说邮件%s的abc与邮件%s的abc具有相同的值是一种错误陈述。它们都返回相同的值,即零,并且它们都具有相同的效果,即打印abc。

要添加到上面所写的内容:

字符串和符号都可以是唯一的。上面所说的是不正确的。它们是具有身份的对象

setq foo abc

赛特巴福

均富酒吧

变量foo和bar的值是相同的唯一字符串

eq abc为非nil的原因是Lisp读取器从这两个文本字符串表达式生成两个不同的字符串对象。另一方面,当Lisp阅读器只遇到abc时,它会将其作为符号名进行读取。正如上面正确所说,实习生第一次使用该名称创建符号,然后查找符号名称

Wrt评估:

字符串是自引用的;也就是说,他们对自己进行评估。大多数符号不是t,而nil是显著的例外

在求值过程中,如果符号在上下文中用作函数,则查找符号以获取其关联函数;如果符号在上下文中用作变量,则查找符号以获取其关联值

在abc xyz中:

符号abc在上下文中用作函数,因此其函数将被查找并用于其函数单元格的值

符号xyz在上下文中用作变量,因此会查找其变量值并使用其变量单元格的值

注意,Emacs Lisp中的符号有两个单元格或含义:a作为函数,b作为变量。给定的符号可能未定义为变量或函数,也可能同时具有这两种定义


最后,就您的意思而言,说邮件%s的abc与邮件%s的abc具有相同的值是一种错误陈述。它们都返回相同的值,即零,它们都具有相同的效果,即打印abc。

您读过WP文章吗?如果没有,这可能是一个有用的起点:也是M-:info elisp Symbols RET,或者你读过WP文章吗?如果没有,它可能是一个有用的起点:同样M-:info elisp Symbols RET或感谢,这真的很有帮助。谢谢,这真的很有帮助。