Вопрос

Я пытаюсь выучить Схему из книги " 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 " часть, которую он пытается выполнить, очевидно,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top