2015-11-09 8 views
0

Я делаю чистый интерпретатор lisp и пытаюсь написать читателя для преобразования списков в пары-пары.Как реализовать вложенный список, используя пары только пары?

от того, что я читал списки внутренне минусы таких пары, как это:

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

, но я понятия не имею, как реализовать вложенный список, такие как следующие с минусами парами

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

Как это должно выглядеть как небрежное?

+0

Вы можете найти этот вопрос и его ответ (отказ от ответственности, это мой ответ) полезно: [Точечная запись в схеме] (http://stackoverflow.com/questions/20216711/dot-notation-in-scheme). –

ответ

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

См this question для программы Scheme (что тривиально перевести на Common Lisp), который выводит список в виде пунктирной пары.

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