我是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)