创建一个包含T作为单个元素的列表

高洛·罗登(Golo Roden)

我遇到了一个问题,即我不确定我到目前为止在Lisp上学到的一切是否正确。

基本上,这项任务很简单:创建一个仅包含单个项目(T文字)的列表。

我的第一种方法是:

'(t)

这样对吗?基本上,它评估为

(T)

这似乎是正确的。随着符号T对自身的求值,这应该可以完成工作。但是后来让我开始想...如果我写

'(s)

我得到:

(S)

这看起来几乎相同,但应该以不同的方式进行评估。所以我想到了

(list t)

这也导致:

(T)

如果我使用符号eq相等来比较符号

(eq (car (list t)) (car '(t)))

而且如果II将两个值T直接比较,一切都很好:

(eq (car (list t)) t)
(eq (car '(t)) t)

因此,简而言之:'(t)这项工作对吗?

雷纳·乔斯维格

我认为您不完全了解评估。

现在我们来看一下Lisp代码。这意味着编程语言的源代码。不是s表达式:

'(t)

上面是一样的:

(quote (t))

如果我们对其进行评估,Lisp会看到QUOTE特殊运算符。QUOTE防止评估包含的表格并返回它。

因此结果是(T)T永远不会得到评估。(T)永远不会得到评估。(T)是一个常量文字列表。

如果您写'(s)'(sin)或其他符号,则无所谓。它始终是一个符号的常量文字列表。

再次输入代码:

(list t)

那是一个功能应用程序。评估时:

  • Lisp将列表LIST视为功能。

  • 它计算参数。T对自己进行评估。

  • LIST以参数调用T

  • 该函数LIST返回一个新列表:(T)

之间有什么区别

(defun foo ()
  '(t))

(defun bar ()
  (list t))

FOO 返回嵌入在代码中的常量文字列表。

BARLIST在运行时调用,每次返回一个新列表。

两个列表都包含相同的符号:T

因此,差异归结为常量数据与函数创建的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个包含 16 个元素的列表?

如何编写一个包含一个元素的列表作为 CSV 中的一个元素而不是列表?

如何访问包含列表作为值的字典中列表值中的最后一个元素

如何将一个元素数组作为单个列/列表返回?

我如何遍历两个不同的列表并创建一个新列表,该列表将列表作为元素,哪些元素包含两个列表中的内容

如何制作一个包含元素的列表作为python中输入的每一行

创建一个包含其他列表元素的列表(相同的结构)

创建大小为“ n”的随机列表,其中包含来自另一个列表的元素

如何创建一个包含对象作为数组元素的类的数组?

CsvHelper创建一个ClassMap <ClassA>,该类包含作为列表项的属性以写入csv文件

如何从一列列表中创建一个包含元素总数的新列

创建一个火花数据框列包含一个列表作为数据类型

是否有一个R函数可以将列表的元素作为参数传递而无需指定单个元素

创建一个包含公共元素和重复次数的列表

jsonschema:仅包含一个默认元素的元素列表

创建一个包含可变数量列表的列表

创建包含一个类列表的类列表

python字典一个元素作为键,一个列表作为值

比较列表中的元素并创建一个新元素

从包含标题作为元素的列表创建字典

XSD可以指定一个元素列表还是一个元素作为根?

断言列表仅包含一个满足条件的元素

随机选择一个包含特定元素的列表

检查至少一个列表是否包含特定元素

Android列表仅包含最后一个元素

数组列表仅包含一个元素

如果列表中的元素包含一个单词 | 蟒蛇

如何制作包含元素的列表以仅包含一个元素的列表列出?

添加一个列表作为另一个列表中的元素