Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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).