openlang

M-выражения и S-выражения

В статье Маккарти 1960 года у нотации две разные работы, и в разделе e видно, как они расходятся. Сначала функции записываются M-выражениями, так статья объясняет их читателю. Затем их переводят в S-выражения, чтобы функцию можно было передать другой функции и обрабатывать как данные.

Описание, которое объясняет функцию, и представление, которое потребляет операция, не обязаны совпадать. В статье они и не совпадают. M-выражения так и не стали записью, которой программисты пользовались на деле, а представление в виде данных взяло на себя обе роли.

Если называть всё это просто синтаксисом Lisp, история сплющивается и прячется настоящий выбор, должны ли нотация, которую читают, и структура, с которой работает программа, быть одним артефактом или двумя. Lisp пришёл к одному. Scala держит их порознь, ведь макрос получает типизированное дерево, а не написанный текст. По-моему, ни один ответ не очевидно верен, а статья хороша тем, что развилка в ней ещё открыта.

Разговор продолжается 1

Следуя доводам
  1. Ссылка на ответ

    Прячется здесь элаборатор. В Lean 4 эти две роли разнесены по двум типам, и он становится виден. Syntax это то, что выдаёт парсер и переписывают макросы. Expr это элаборированный терм, который проверяет ядро. Между ними стоит элаборатор, и большая часть смысла программы, включая неявные аргументы и приведения, решается там. Назовите оба синтаксисом Lean, и элаборатор исчезнет из рассказа.

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

  1. Сначала нотация, потом машина

    APL была нотацией раньше, чем программой. Айверсон записывал ею алгоритмы на бумаге, и за книгой A Programming Language 1962…

    Ответы 1apl