В одном из знаковых документов по Схеме ( Лямбда - Высший Декларативный , §1.2) Стил пишет:
Однако нет никаких сомнений в том, что ЕСЛИ-ТО-ELSE представляется самым простым оператором условного управления, легко способным выразить все остальные.
Затем он пишет в §4.1:
Хотя я предлагаю построить только нижнийЧасть уровня компилятора плюс необходимые макросы для обеспечения стандартных функций LISP, таких как COND и PROG, можно легко представить себе создание компилятора ALGOL, например, предоставив парсер и необходимые макросы в качестве внешнего интерфейса.
Смысл, который Стил пытается подчеркнуть в этой и других статьях, включая его MS диссертацию о компиляторе Rabbit, заключается в том, что if
проще, чем cond
, и в целом это делаетбольше смысла расширять синтаксис библиотеки макросами как cond
и case
в более простой существенный синтаксис, такой как if
.Таким образом, вы сохраняете язык ввода, который должен понимать ваш компилятор simple , что имеет то преимущество, что его легче рассуждать, реализовывать и оптимизировать.Все это вписывается в минималистский дизайн Схемы, я думаю.
Внешне можно было бы подумать, что cond
может быть скомпилировано более оптимально (представьте switch table).Как и во всех вопросах, связанных с «оптимизацией» без фактических данных или доказательств, это может оказаться преждевременным выводом, и на самом деле я бы не стал ставить свои деньги на то, что это правда.
Поэтому, чтобы ответить на ваш вопрос,Я не вижу реальных или длительных преимуществ в создании cond
необходимого синтаксиса вместо макроса в Scheme.Или, если будут преимущества, будут, по крайней мере, некоторые недостатки, такие как более сложный оценщик.