Я новый ученик Схемы / Ракетки, поэтому прошу прощения за любые явные синтаксические ошибки.
Сегодня в классе пришли к выводу, что список схем '(a, b, c)
должен быть недействительным, но когда мы его запустили, он вернул:
>'(a . b . c)
(b a c)
Что не имеет смысла. Afaik, переводчик должен создать cons-ячейку с машиной 'a и cdr' b, а 'c должен быть недействительным. Тем не менее, переводчик делает что-то действительно странное здесь. Это работает со схемой #lang, ракеткой #lang и другими. Мы используем DrRacket в качестве переводчика.
Интересно, что
>'(a . b . c . d)
выдает исключение и умирает.
Мне очень любопытно, и мне хотелось бы понять это, поскольку я новичок в этом языке. Google был очень бесполезен (вероятно, так как условия поиска довольно неоднозначны) Спасибо!
EDIT:
Это может быть потому, что '(a . b . c)
интерпретируется с b как инфиксный оператор. Например: >(4 . + . 6)
возвращает 10. Возможно, интерпретатор использует b как оператор? то есть (b a c)
как (+ 4 6)
, инфиксное.
Эксперимент говорит:
>(define b +)
>(define a 4)
>(define c 6)
>(a . b . c)
10
Так что я думаю, что это решает проблему, но я все еще не до конца понимаю использование "." оператор в этом случае. Я думаю, что мы решили это, но любая дополнительная информация будет принята с благодарностью!