Минусы схемы и длина

Я изучаю схему, и я только что столкнулся со своей первой проблемой:

(define x (cons (list 1 2) (list 3 4)))
(length x)
3

почему на выходе 3, а не 2? я показал х

((1 2) 3 4)

почему именно так, а не ((1 2) . (3 4)) ?

Спасибо.


person user1544128    schedule 10.01.2013    source источник


Ответы (2)


Может быть, так проще увидеть.

У вас есть:

(cons (list 1 2) (list 3 4))

если ты

(define one-two (list 1 2))

у вас есть

(cons one-two (list 3 4))

что эквивалентно

(cons one-two (cons 3 (cons 4 '())))

or

(list one-two 3 4)

который

((1 2) 3 4)
person Christoffer Hammarström    schedule 10.01.2013
comment
чего я не понимаю, так это от (cons a (cons 3 (cons 4 '()))) до (list a 3 4). Разве ячейка cons не должна заканчиваться на '(), чтобы быть списком? - person user1544128; 10.01.2013
comment
Нет, список — это cons-ячейка, где cdr — список, а '() — пустой список. - person Christoffer Hammarström; 10.01.2013
comment
Итак, (cons 4 '()) — это список, потому что его cdr — это список, пустой список. И (cons 3 (cons 4 '())) — это список, потому что его cdr — это список, список из первого предложения. И (cons a (cons 3 (cons 4 '()))) — это список, потому что его cdr — это список из второго предложения. - person Christoffer Hammarström; 10.01.2013
comment
Я вижу свет! Спасибо :) - person user1544128; 10.01.2013

Список является основной структурой данных схемы. Cons используется для создания пары объектов. Список - это цепочка минусов. например. список (1 2 3 4) такой же, как (против 1 (против 2 (против 3 (против 4 '())))). См. представление указателя блока, чтобы было понятно

person Nithin Mohan    schedule 12.01.2013