如何在 lisp 中创建 (d . nil)
How to create (d . nil) in lisp
我是 Lisp 初学者。有一个问题我无法解决。
显示当您键入以下内容时 Lisp 将打印出的最简单的表达式
表达式:
’(a b (c . e) (d . nil))
我试过了(cons 'a (cons 'b (cons (cons 'c 'e) (cons (cons 'd nil)))))
但是,它不会创建 (d . nil)。
那么,有什么方法可以创建这样的点对吗?
Show the simplest expression that Lisp will print out when you type the following expression
问题不是问你点对,而是点对是怎么打印的。我想这个问题的目的是向您展示列表只是以特殊方式打印的点对。
如果你在 REPL 中这样写:
'(a b (c . e) (d . nil))
REPL 回复:
(A B (C . E) (D))
如果你写:
你会得到完全相同的输出
'(a . (b . ((c . e) . ((d . nil) . nil))))
基本上,(a b)
是由子列表(b)
前面的符号a
组成的列表,写作(a . (b))
。这里我只说表单是如何读取的。如果你直接在 REPL 中写入它们,它们将首先被 read,然后 evaluated,在这种情况下你会得到一个错误。这就是示例中被引用的原因:被引用的表达式不被计算,而是返回 as-is.
如果您想编写代码,在求值时生成 cons-cell (0 . 1)
,您必须编写此列表:
(cons 0 1)
以上是三个元素的列表,可以等价写成:
(cons . (0 . (1 . nil)))
您的口译员将阅读此列表(一个符号,两个数字)并评估生成的表格。该表单在运行时生成以下 cons 单元格:
(0 . 1)
我是 Lisp 初学者。有一个问题我无法解决。
显示当您键入以下内容时 Lisp 将打印出的最简单的表达式 表达式:
’(a b (c . e) (d . nil))
我试过了(cons 'a (cons 'b (cons (cons 'c 'e) (cons (cons 'd nil)))))
但是,它不会创建 (d . nil)。
那么,有什么方法可以创建这样的点对吗?
Show the simplest expression that Lisp will print out when you type the following expression
问题不是问你点对,而是点对是怎么打印的。我想这个问题的目的是向您展示列表只是以特殊方式打印的点对。
如果你在 REPL 中这样写:
'(a b (c . e) (d . nil))
REPL 回复:
(A B (C . E) (D))
如果你写:
你会得到完全相同的输出'(a . (b . ((c . e) . ((d . nil) . nil))))
基本上,(a b)
是由子列表(b)
前面的符号a
组成的列表,写作(a . (b))
。这里我只说表单是如何读取的。如果你直接在 REPL 中写入它们,它们将首先被 read,然后 evaluated,在这种情况下你会得到一个错误。这就是示例中被引用的原因:被引用的表达式不被计算,而是返回 as-is.
如果您想编写代码,在求值时生成 cons-cell (0 . 1)
,您必须编写此列表:
(cons 0 1)
以上是三个元素的列表,可以等价写成:
(cons . (0 . (1 . nil)))
您的口译员将阅读此列表(一个符号,两个数字)并评估生成的表格。该表单在运行时生成以下 cons 单元格:
(0 . 1)