我是 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)
是由符号 a
和子列表 (b)
组成的列表,写为 (a.(b))
。这里我只谈表单是如何阅读的。如果您直接在 REPL 中写入它们,它们将首先被读取,然后是求值,在这种情况下您将得到一个错误。这就是示例中被引用的原因:被引用的表达式不会被计算,而是按原样返回。
如果你想编写代码,在计算时生成cons-cell (0 . 1)
,你必须写这个列表:
(cons 0 1)
上面是三个元素的列表,可以等价写成:
(cons . (0 . (1 . nil)))
您的解释器将阅读此列表(一个符号,两个数字)并评估生成的表格。该表单在运行时生成以下 cons 单元格:
(0 . 1)
关于lisp - 如何在 lisp 中创建 (d . nil),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940382/