Ракетка (Схема) Ошибка: ожидал название символа после кавычки, но нашел часть

Я запускаю этот код (The Little Schemer) в версии Dr. Racket 5.3.6:

(define rember
(lambda (a lat)
(cond
  ((null? lat) (quote ()))
  (else 
   (cond
     ((eq? (car lat) a) (cdr lat))
     (else (cons (car lat) (rember a (cdr lat)))))))))

и выдает ошибку: quote: expected the name of the symbol after the quote, but found a part в части (quote ())). Что я здесь делаю не так?


person Krishnan Ravikumar    schedule 02.09.2014    source источник


Ответы (1)


Ошибка указывает на то, что вы выбрали запуск программы на языке «Начинающий студент». В этом языке форма quote ограничена.

Если вы измените язык на «Начинающий студент со списками сокращений», все будет работать гладко.

Поищем quote в документации языка "Beginning Student":

Форма quote для начинающих учащихся

Вы увидите, что синтаксис описывается как (syntax name). Если вы сравните это с документацией «Начинающий студент со списками сокращений», вы увидите, что quote теперь позволяет цитировать списки.

Причина, по которой язык для начинающих студентов ограничена, заключается в том, что в начале HtDP используется только форма (quote name), поэтому, если учащийся, следующий за HtDP, пишет '(foo bar), то это непреднамеренно. Поэтому сообщение об ошибке (сообщение о том, что ожидается имя) полезно - следовательно, форма quote должна быть ограничена.

person soegaard    schedule 02.09.2014