Выражение синтаксических правил само по себе соответствует значению в схеме?
В Chibi и CHICKEN, следующие syntax-rules
выражение оценивает процедуру:
(syntax-rules () ((_) #f))
Это просто артефакт того, как написаны эти конкретные реализации? Спецификации языка Scheme, похоже, не вызывают syntax-rules
как возможность оценить значение.
Обновить
Кажется, это может зависеть от версии Схемы?
Семантика: Экземпляр синтаксических правил оценивает во время макроразвития новый макротрансформатор, указывая последовательность гигиенических правил перезаписи. Использование макроса, ключевое слово которого связано с преобразователем, заданным синтаксическими правилами, сопоставляется с шаблонами, содержащимися в s, начиная с самого левого. Когда совпадение найдено, макрос используется в соответствии с шаблоном. Это нарушение синтаксиса, когда совпадение не найдено.
Из спецификации R 5 RS и спецификации R 7 RS:
Семантика. Экземпляр синтаксических правил создает новый макротрансформатор, определяя последовательность гигиенических правил перезаписи. Использование макроса, ключевое слово которого связано с преобразователем, заданным правилами синтаксиса, сопоставляется с шаблонами, содержащимися в правилах синтаксиса, начиная с крайнего левого правила синтаксиса. Когда совпадение найдено, макрос используется в соответствии с шаблоном.
1 ответ
Синтаксические правила возвращают преобразователь, который является процедурой, используемой расширителем для преобразования синтаксического расширения в другое синтаксическое расширение. Смотрите также здесь.
Так что нет, это не специальная форма (она исчезла из вашего вопроса за это время), и да, она оценивается как значение, поскольку в Scheme есть первоклассные процедуры, и поэтому процедуры являются значениями.
Это стандартное поведение Схемы, а не детали реализации Chicken или Chibi.