0

我正在制作一个纯 Lisp 解释器,并尝试编写一个阅读器将列表转换为缺点对。

从我读过的列表来看,内部是这样的缺点对:

( 1 2 3 ) = (1.(2.(3.NIL)))

但我不知道如何使用 cons 对实现嵌套列表,如下所示

( (1 2) (3 4 ) (5 6 ) )

这应该怎么看起来像未缩写?

4

2 回答 2

1
CL-USER 40 > (sdraw::sdraw '( (1 2) (3 4 ) (5 6 ) ))

[*|*]------------------>[*|*]------------------>[*|*]--->NIL
 |                       |                       |
 v                       v                       v
[*|*]--->[*|*]--->NIL   [*|*]--->[*|*]--->NIL   [*|*]--->[*|*]--->NIL
 |        |              |        |              |        |
 v        v              v        v              v        v
 1        2              3        4              5        6
于 2015-11-09T17:48:42.953 回答
0

那将是

> '((1 . (2 . ())) . ((3 . (4 . ())) . ((5 . (6 . ())) . ())))
'((1 2) (3 4) (5 6))

或者

? '((1 . (2 . nil)) . ((3 . (4 . nil)) . ((5 . (6 . nil)) . nil)))
((1 2) (3 4) (5 6))

有关将列表打印为点对的 Scheme 程序(转换为 Common Lisp 很简单),请参阅此问题。

于 2015-11-09T17:56:51.880 回答