Правильный список: Hidden () в списках схем - PullRequest
0 голосов
/ 15 декабря 2018

В Схеме использование list для определения списка гарантирует, что результат является правильным списком, а это означает, что его последний элемент является списком ().

Если определен тестовый список:

(define test (list 27 3))

И, взяв length списка, Ракет говорит, что это 2. Когда один prints список, он отображает только (27 3), не показывая ().

Однако, если взять (rest (rest test)), появляется ().Выполнение (list-ref test 2) приводит к ошибке.

Если () появляется как 3-й элемент в списке при cdr просмотре элементов, почему он не считается членом списка?

Не приведет ли это к путанице между правильными и неправильными списками в Схеме?

1 Ответ

0 голосов
/ 15 декабря 2018

Список представляет собой цепочку пар.Элементами являются car s каждой пары, а cdr каждой пары является ссылкой на следующую пару в цепочке.

cdr последней пары правильного списка является ссылкойк специальному () объекту, который представляет пустой список.Это не элемент списка, потому что он находится в cdr, а не car.

Функция rest возвращает cdr пары.Так что (rest (rest test)) возвращает второй cdr, то есть (), потому что он находится в конце списка.

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

...