如何在LISP中创建(d.nil)



我是LISP的初学者。有一个我无法解决的问题。

显示LISP在输入以下内容时将打印出来的最简单表达式表达式:

’(a b (c . e) (d . nil))

我尝试了(cons 'a (cons 'b (cons (cons 'c 'e) (cons (cons 'd nil)))))

但是,它不会创建(d。nil(。

那么,有什么方法可以创建这样的点对?

显示最简单的表达式,当您键入以下表达式

时,LISP将打印出来

这个问题不是要求您创建虚线对,而是如何打印虚线对。我想这个问题旨在向您展示清单是以特殊方式打印的虚线对。

如果您在一个repl中写下此写:

'(a b (c . e) (d . nil))

替补答复:

(A B (C . E) (D))

如果您编写:

,您的输出完全相同
'(a . (b . ((c . e) . ((d . nil) . nil))))

基本上,(a b)是由符号a在Sublist (b)(书面(a . (b))(面前制成的列表。在这里,我只是在谈论读取的形式。如果您将它们直接写在repl中,则首先将是读取,然后评估,在这种情况下,您将遇到错误。这就是引用示例中的原因:未评估所引用的表达式,而是返回的。

如果要编写代码,在评估时会产生cons-cel (0 . 1),则必须编写此列表:

(cons 0 1)

以上是三个元素的列表,可以同样写:

(cons . (0 . (1 . nil)))

您的解释器将读取此列表(一个符号,两个数字(,并评估结果表格。该表格在运行时产生以下缺点单元格:

(0 . 1)

最新更新