В The Little Schemer (4-е изд.) a> утверждается, что список, для которого null?
неверно, содержит как минимум один атом , по крайней мере, я так понимаю из моего чтения текста.
Для меня это не имеет смысла, поскольку (atom '())
ложно, и мы можем вставить их в список, чтобы сделать его ненулевым:
> (null? '(()))
#f
Итак, мой вопрос: это ошибка моего чтения или вопрос определений? Поскольку его нет в списке исправлений, я полагаю, что в такой хорошо изученной книге не будет такой ошибки.
Если бы мы считали (())
тем же, что (() . ())
или даже (cons '() '())
, а затем рассматривали cons
атом, тогда я мог бы увидеть, как вы можете туда добраться, но я не думаю, что это то, что происходит.
(это было протестировано в Racket 7.0 с определением atom?
, данным в книге, т.е.
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))
Я знаю, что это не касается забавных функций Racket, но здесь должно быть достаточно.)
nil
(a. K. A.()
) - это атом, но я также нашел определение, которое вы много раз давали в Интернете. Первый создает дихотомию междуatom
иcons
, а второй - междуatom
иlist
. Для меня первое имеет больше смысла. - person Svante   schedule 13.12.2018