M-выражение


M-выраже́ния (или ме́тавыраже́ния) в программировании изначально предполагалось использовать для записи функций на Лиспе. Данные, обрабатываемые при помощи M-выражений, записывались с использованием S-выражений. M-выражения использовались в первоначальном теоретическом языке, описанном в ранних статьях о Лиспе, однако, в первой работающей реализации Лиспа M-выражения кодировались S-выражениями, и транслятор M-выражений так и не был реализован.

Проект по точному определению M-выражений и их компиляции, или, по крайней мере, трансляции в S-выражения так и не был ни закончен, ни явным образом заброшен. Он был просто отложен на некое неопределённое время, а новое поколение программистов открыло для себя, что они предпочитают внутреннюю нотацию любым формам записи программы в стиле FORTRAN-а или ALGOL-а, которые могли бы быть придуманы.

The project of defining M-expressions precisely and compiling them or at least translating them into S-expressions was neither finalized nor explicitly abandoned. It just receded into the indefinite future, and a new generation of programmers appeared who preferred internal notation to any FORTRAN-like or ALGOL-like notation that could be devised.

S-выражения представляют собой данные, составляемые только из атомов и пар. Первоначально атом описывался, как символ в верхнем регистре, а пары ограничивались скобками. Была описана также сокращённая запись списков, хотя первоначально элементы списков разделялись в ней запятыми, а не пробелами. Например запись (мы используем пробелы, а не запятые):

представляет собой список из трёх элементов, каждый из которых представляет собой список из двух символов.