2013-03-18 3 views
2

В настоящее время я внедряю сетевую среду Scheme для пинков и хихиканья. Во время внедрения анализатора я наткнулся на странность: в некоторых реализациях схемы указано, что цифры числа считываются до тех пор, пока не будет выполнен разделитель, но они также утверждают, что двойная кавычка является допустимым разделителем. Успешно оценивая 123"abc", мне кажется странным, но Racket, похоже, делает это, отображая 123 и "abc" последовательно.Scheme - может ли Double-Quote линять номер?

Смущенный, я загрузил Gimp и перешел в консоль Script-Fu, которая находится под Guile Scheme. Давая ему одно и то же выражение, он жалуется на несвязанное значение; поэтому он пытается разобрать его как символ?

Я попробовал JScheme как «третье мнение». Он также жаловался на неопределенную переменную.

TL; Какое должно быть поведение Схемы?

Побочное примечание: с учетом двух последних в жалобы, я попытался следующие:

(define 123"abc" 10) 
123"abc" 

Она оценивается как 10. Я смущен. Должна ли не отмечать знак двойных кавычек, чтобы синтаксический анализатор выдавал вызов, а не назначал символ?

+1

Для справки синтаксис схемы описан в R5RS или R6RS. Я ожидал бы, что 123 «abc» разобратся в число и строку. Но лучше проконсультируйтесь с соответствующими разработчиками. Лучше всего им ответили. Вопрос интересный, но, скорее всего, вы получите ответы. –

ответ

1

Попробуйте это на выбранной реализации схемы (возможно, вам необходимо загрузить в SRFI 6, прежде чем струнные порты будут работать):

(call-with-input-string "(123\"abc\")" read) 

На обоих Ракетка и коварства, это читается как (123 "abc"), что именно так, как я ожидать. С быстрым взглядом на раздел «Лексическая структура» R5RS я считаю, что реализации, которые возвращают что-то другое, например (|123"abc"|), вероятно, являются несоответствующими.