'((1 2 3) 4 5 6)
на самом деле пара списков. Вот еще один способ написать это:
'((1 2 3) . (4 5 6))
Тем не менее, принтер избегает обозначения точечной парой, когда это возможно, поэтому вы получите первое представление вместо этого. Правило:
'(x . (xs ...))
=>
'(x xs ...)
Для любых x
и xs
. Здесь ваши x = '(1 2 3)
и xs = '(4 5 6)
, поэтому вы получите ((1 2 3) 4 5 6)
.
Чтобы увидеть, как соотносятся минусы и обозначения точечной пары, давайте сократим проблему до '(1)
и '(6)
. Самый низкий способ построить пару из них - это:
(cons (cons 1 '()) (cons 6 '()))
Здесь '()
- ноль или пустой список. Если мы переведем это буквально в запись с точечной парой, мы получим это:
'((1 . ()) . (6 . ()))
Но поскольку принтер по возможности сворачивает нотацию с точечной парой, вместо этого вы получите:
'((1 . ()) . (6 . ()))
=>
'((1) . (6)) ; <-- x=1, xs=nothing; x=6, xs=nothing
=>
'((1) 6) ; <-- x=1, xs=6