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

Нулевое значение в Mit-Scheme?

Может ли кто-нибудь сказать мне, что представляет собой представление нулевого значения в мит-схеме? В книге SICP это должно быть "ноль", но оно не работает. Благодарю.

4b9b3361

Ответ 1

'() должен работать. В принципе, nil в схеме - пустой список, поэтому цитирование пустого списка дает вам нуль.

Ответ 2

Есть история. посетите http://web.archive.org/web/20070808004043/http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions

Оригинал (сломан): http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions


Текст вышеуказанного FAQ (в случае поломки интернет-архива):

Почему не работает "nil"?

Быстрый ответ: nil больше не является частью Схемы, вместо этого используйте '(). Долгий ответ следует...

В предыдущих примерах в главе 2 используйте nil в качестве ограничителя списка, но когда эти примеры выполняются с использованием (например,) схемы MIT, вы получаете:

;Unbound variable: nil

Аналогично, использование () или null вместо nil может работать с некоторыми реализациями, но ни одна из них не переносима. Книга мастера задает вопрос в этой сноске.

Замечательно, сколько энергии в стандартизации диалектов Lisp было рассеяно в аргументах, которые буквально ни к чему: если ноль будет обычным именем? Должно ли значение nil быть символом? Должен ли он быть списком? Разве это пара? В Scheme nil - это обычное имя, которое мы используем в этом разделе как переменную, значение которой является маркером конца списка (так же, как true является обычной переменной, которая имеет истинное значение). Другие диалекты Lisp, включая Common Lisp, обрабатывают nil как специальный символ. Авторы этой книги, которые пережили слишком много скандалов в области стандартизации, хотели бы избежать всей проблемы. Как только мы представим цитату в разделе 2.3, мы будем обозначать пустой список как '() и полностью обходим с переменной nil.

Так как это было записано, nil был вырезан из стандарта Scheme, но в нижней строке: use '(), а не nil. В электронном письме в список accu-sicp Майк отмечает:

Это неприятная вещь, этот бизнес nil/null/'(). Схема 48 и     scm не определяет нуль, а guile определяет его, но как процедуру, сродную     общий Lisp null (идти со своим nil, который ведет себя как cl nil,     который сам отличается от '() -может ли это что-то делать     с fsf планирует повторно использовать emacs в хитрости). Я считаю, что лучше всего     замените авторов на использование nil на '().

[Скопировано только прикосновением типографской очистки, чтобы лучше совместить Markdown и обычный ASCII-вход в соответствующие языки/реализации.]

Ответ 3

Я использую MIT/GNU Scheme microcode 15.3, () и '() все работает. (как вы сказали, nil и null не работает).

1 ]=> ()

;Value: ()

1 ]=> '()

;Value: ()

1 ]=> (cons 1 ())

;Value 2: (1)

1 ]=> (cons 1 '())

;Value 3: (1)

Ответ 4

(list) '() и() могут представлять нуль. например,

(define (transpose mat) (accumulate-n cons () mat))

или замените() на '() или (список).