Интересно, означают ли '(1 . 2)
и '(1 2)
одни и те же данные (равные друг другу) в Схеме или нет? Я думаю, что это одно и то же, верно ли это?
Являются ли пары и список разными в Схеме?
Ответ 1
Нет, они не совпадают.
'(1 . 2)
означает (cons 1 2)
тогда
'(1 2)
означает (cons 1 (cons 2 nil))
Ответ 2
(1 . 2)
иногда называют неправильным списком, потому что он не завершен NIL. (1 2)
, представленный в виде точечной формы, может быть записан (1 2 . NIL)
, но вы не должны писать что-то вроде этого.
Ответ 3
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 лет, некоторые люди даже не родились там.
Ответ 4
Да!
Пары: (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)
.