Назначение списка атомов на схеме
Вопрос
Я пытаюсь выучить Схему из книги " The Little Schemer " используя DrScheme на Macintosh. Он начинается с таких вещей, как & Quot; что такое машина l, где l - аргумент (a b c)? & Quot;
Я понимаю, что ответ на этот вопрос - "а", но я не могу понять, что набрать в Dr Scheme, чтобы & "следовать" & ". Простая идея о том, как присвоить l, например, & Gt; (def l ('a' b 'c))
дает мне ошибку: " вызов функции: ожидал определенного имени или имени примитивной операции после открытых скобок, но нашел что-то еще "
Решение
Чтобы определить что-то:
(define <name> <value>)
Итак, чтобы определить l:
(define l '(a b c))
Это определяет l
как список (a b c)
. Знак одинарной кавычки заключает в кавычки все, что следует за ним, будь то символ или список, что означает, что он не оценивается, а читается как есть. Однако вы не цитируете имя, для которого вы его устанавливаете. К счастью, это одна из очень немногих операций в Схеме, где у вас есть это несоответствие.
Другие советы
Попробуйте это:
(define l '(a b c))
Здесь цитата распространяется на весь список (a b c)
.
Или просто используйте
(car '(a b c))
Ошибка говорит вам следующее: когда читатель видит список, он хочет обработать первый элемент списка как функцию. Вот как работает (+ 1 2 3)
: он вызывает функцию +
. (Строго говоря, он смотрит на символ '+
и обнаруживает, что к нему привязана функция, а затем вызывает эту функцию.)
Итак, когда вы печатаете
(define l ('a 'b 'c))
он смотрит на внутренний список и затем хочет найти функцию. Вместо этого он находит символ с именем a
. Поскольку там нет функции, вы получаете ошибку. Если вместо этого вы введете
(define l '(a b c))
Вы сказали читателю через цитату, что он должен воспринимать это как список, не пытаясь его интерпретировать.
Вот пример из схемы MIT на Mac:
1 ]=> (define li '(a b c))
;Value: li
1 ]=> (car li)
;Value: a
1 ]=> (car '(a b c ))
;Value: a
Не сокращенная форма
(define l '(a b c))
is
(define l (quote (a b c)))
или в этом случае даже это:
(define l (list 'a 'b 'c))
без " list " часть, которую он пытается выполнить, очевидно,