如何仅使用cons对实现嵌套列表



我正在制作一个纯Lisp解释器,并试图编写一个读取器来将列表转换为cons对。

从我读到的列表中可以看到内部的cons对,比如:

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

但是我不知道如何用cons对实现嵌套列表

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

这怎么看起来像是未经诅咒的?

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

那将是

> '((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很简单)。

相关内容

  • 没有找到相关文章

最新更新