Я изучаю схему, и я только что столкнулся со своей первой проблемой:
(define x (cons (list 1 2) (list 3 4)))
(length x)
3
почему на выходе 3, а не 2? я показал х
((1 2) 3 4)
почему именно так, а не ((1 2) . (3 4))
?
Спасибо.
Я изучаю схему, и я только что столкнулся со своей первой проблемой:
(define x (cons (list 1 2) (list 3 4)))
(length x)
3
почему на выходе 3, а не 2? я показал х
((1 2) 3 4)
почему именно так, а не ((1 2) . (3 4))
?
Спасибо.
Может быть, так проще увидеть.
У вас есть:
(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)
(cons a (cons 3 (cons 4 '())))
до (list a 3 4)
. Разве ячейка cons не должна заканчиваться на '()
, чтобы быть списком?
- person user1544128; 10.01.2013
cdr
— список, а '()
— пустой список.
- person Christoffer Hammarström; 10.01.2013
(cons 4 '())
— это список, потому что его cdr
— это список, пустой список. И (cons 3 (cons 4 '()))
— это список, потому что его cdr
— это список, список из первого предложения. И (cons a (cons 3 (cons 4 '())))
— это список, потому что его cdr
— это список из второго предложения.
- person Christoffer Hammarström; 10.01.2013
Список является основной структурой данных схемы. Cons используется для создания пары объектов. Список - это цепочка минусов. например. список (1 2 3 4) такой же, как (против 1 (против 2 (против 3 (против 4 '())))). См. представление указателя блока, чтобы было понятно