Какие преимущества дает изменение «cond» на специальную форму? - PullRequest
0 голосов
/ 19 февраля 2010

Какие преимущества дает изменение «cond» на специальную форму вместо синтаксического сахара?

Ответы [ 2 ]

5 голосов
/ 19 февраля 2010

В одном из знаковых документов по Схеме ( Лямбда - Высший Декларативный , §1.2) Стил пишет:

Однако нет никаких сомнений в том, что ЕСЛИ-ТО-ELSE представляется самым простым оператором условного управления, легко способным выразить все остальные.

Затем он пишет в §4.1:

Хотя я предлагаю построить только нижнийЧасть уровня компилятора плюс необходимые макросы для обеспечения стандартных функций LISP, таких как COND и PROG, можно легко представить себе создание компилятора ALGOL, например, предоставив парсер и необходимые макросы в качестве внешнего интерфейса.

Смысл, который Стил пытается подчеркнуть в этой и других статьях, включая его MS диссертацию о компиляторе Rabbit, заключается в том, что if проще, чем cond, и в целом это делаетбольше смысла расширять синтаксис библиотеки макросами как cond и case в более простой существенный синтаксис, такой как if.Таким образом, вы сохраняете язык ввода, который должен понимать ваш компилятор simple , что имеет то преимущество, что его легче рассуждать, реализовывать и оптимизировать.Все это вписывается в минималистский дизайн Схемы, я думаю.

Внешне можно было бы подумать, что cond может быть скомпилировано более оптимально (представьте switch table).Как и во всех вопросах, связанных с «оптимизацией» без фактических данных или доказательств, это может оказаться преждевременным выводом, и на самом деле я бы не стал ставить свои деньги на то, что это правда.

Поэтому, чтобы ответить на ваш вопрос,Я не вижу реальных или длительных преимуществ в создании cond необходимого синтаксиса вместо макроса в Scheme.Или, если будут преимущества, будут, по крайней мере, некоторые недостатки, такие как более сложный оценщик.

0 голосов
/ 19 февраля 2010

cond - это специальная форма, поскольку параметры не должны оцениваться, пока они не должны.
Очень важно. И если я не ошибаюсь, у Схемы изначально не было формы , если .
На самом деле форма if может быть синтаксическим сахаром с использованием макросов.

...