Являются ли пары и список разными в Схеме?

183
18

Интересно, означают ли '(1 . 2) и '(1 2) одни и те же данные (равные друг другу) в Схеме или нет? Я думаю, что это одно и то же, верно ли это?

спросил(а) 2021-01-19T17:11:26+03:00 6 месяцев назад
1
Решение
221

Нет, они не совпадают.


'(1 . 2) означает (cons 1 2)

тогда


'(1 2) означает (cons 1 (cons 2 nil))

ответил(а) 2021-01-19T17:11:26+03:00 6 месяцев назад
89

(1 . 2) иногда называют неправильным списком, потому что он не завершен NIL. (1 2), представленный в виде точечной формы, может быть записан (1 2 . NIL), но вы не должны писать что-то вроде этого.

ответил(а) 2021-01-19T17:11:26+03:00 6 месяцев назад
78

dr rackect объясняет это намного яснее:


"A пара объединяет два произвольных значения..... Процедура cons создает пары"


(cons 1 2)
'(1 . 2)

(pair? (cons 1 2))
#t


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


"Список представляет собой комбинацию пар, которая создает связанный список. Точнее, список представляет собой либо пустой пустой список, либо пара, первым элементом которого является элемент списка, а вторым элементом является список."


 (cons 0 (cons 1 (cons 2 null)))
'(0 1 2)

http://docs.racket-lang.org/guide/pairs.html


пожалуйста, LISP существует с тех пор, как 50 для точных ответов смотрят на их документацию и пример, который они окружают уже более 60 лет, некоторые люди даже не родились там.

ответил(а) 2021-01-19T17:11:26+03:00 6 месяцев назад
63

Да!


Пары: (cons y z) создает пару между значениями y и z. Аналогично, (более сложное) выражение (cons x (cons y z)) создает пару между x и парой (y . z). Вы также можете представить эти пары как '(y . z) и '(x . (y . z))


Списки: Список - это особый тип пары. Это случай, когда значение парруется в уже существующий список. Поскольку первый список должен начинаться где-то, у нас всегда есть нулевой список '() (иногда называемый "пустым списком" ), готовый к сопряжению. Итак, (cons y '()) пары y с нулевым списком становятся списком с одним элементом '(y). Аналогично, (cons x '(y)) и (cons x (cons y '())) пара x в список '(y), чтобы стать списком '(x y).


lists pairs

ответил(а) 2021-01-19T17:11:26+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема