Почему списки, созданные с помощью cons () и list (), отображаются по-разному? - PullRequest
0 голосов
/ 17 ноября 2011

Почему списки, созданные с помощью cons () и list (), отображаются по-разному, несмотря на то, что списки равны?Первый показывает элементы, разделенные точкой, а второй - без.

> (cons 1 2)
(1 . 2)

> '(1 2)
(1 2)

Я знаю, что cons создает пунктирную пару, но в этом случае списки совпадают, но отображаются по-разному.

Ответы [ 3 ]

8 голосов
/ 17 ноября 2011

Это не тот же список ;список, такой как

  (1 2)

, который возвращается вашим выражением в кавычках (т.е. 2-м), совпадает с результатом

 (cons 1 (cons 2 ())

Правильный список, подобный приведенному выше, всегдасвязанный список пар, последняя пара которых имеет нулевой хвост.

5 голосов
/ 17 ноября 2011

Расширить ответ Базиля:

(1 2)

- это правильный список длины два. То есть он содержит две ячейки минусов:

#1=(1 . #2#)
#2=(2 . ())

С другой стороны,

(1 . 2)

является неправильным списком длины один. То есть он содержит одну ячейку минусов:

#1=(1 . 2)

Непустой правильный список - это список, в котором последняя ячейка конса cdr, содержащая пустой список, (). Непустой неправильный список - это список, в котором последняя ячейка конса cdr содержит что-то еще.

0 голосов
/ 25 мая 2013

Позвольте мне еще больше расширить предыдущие ответы

Хотя мы говорим здесь о языке Лисп, я заметил, что строка из Стр. 8 и 9 известной Книги с именем "Маленький интриган (4-е издание) " помогите мне понять 2 загадочных факта:

    Why is (cons 1    2) does not look like '(1 2)?
    Why is (cons 1 '(2)) does     look like '(1 2)?
    ----
    > (cons 1 2)
    (1 . 2)
    > (cons 1 '(2))
    (1 2)
    > '(1 2)
    (1 2)

Просто прочитайте " Законы минусов ":

Примитив cons принимает 2 аргумента.

2-й аргумент cons должен быть списком.

Результатом является список.

На практике: ( cons AB) работает для всех значений A и B , А

( автомобиль ( минусы AB)) = A

( cdr ( cons AB)) = B

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...