Выражение синтаксических правил само по себе соответствует значению в схеме?

В Chibi и CHICKEN, следующие syntax-rules выражение оценивает процедуру:

(syntax-rules () ((_) #f))

Это просто артефакт того, как написаны эти конкретные реализации? Спецификации языка Scheme, похоже, не вызывают syntax-rules как возможность оценить значение.


Обновить

Кажется, это может зависеть от версии Схемы?

Из R 6 RS Spec:

Семантика: Экземпляр синтаксических правил оценивает во время макроразвития новый макротрансформатор, указывая последовательность гигиенических правил перезаписи. Использование макроса, ключевое слово которого связано с преобразователем, заданным синтаксическими правилами, сопоставляется с шаблонами, содержащимися в s, начиная с самого левого. Когда совпадение найдено, макрос используется в соответствии с шаблоном. Это нарушение синтаксиса, когда совпадение не найдено.

Из спецификации R 5 RS и спецификации R 7 RS:

Семантика. Экземпляр синтаксических правил создает новый макротрансформатор, определяя последовательность гигиенических правил перезаписи. Использование макроса, ключевое слово которого связано с преобразователем, заданным правилами синтаксиса, сопоставляется с шаблонами, содержащимися в правилах синтаксиса, начиная с крайнего левого правила синтаксиса. Когда совпадение найдено, макрос используется в соответствии с шаблоном.

1 ответ

Решение

Синтаксические правила возвращают преобразователь, который является процедурой, используемой расширителем для преобразования синтаксического расширения в другое синтаксическое расширение. Смотрите также здесь.

Так что нет, это не специальная форма (она исчезла из вашего вопроса за это время), и да, она оценивается как значение, поскольку в Scheme есть первоклассные процедуры, и поэтому процедуры являются значениями.

Это стандартное поведение Схемы, а не детали реализации Chicken или Chibi.

Другие вопросы по тегам