M-expression
“M-expression”
コンピューター プログラミングでは、M 式(またはメタ式) は、 FortranやALGOLなどの現代の言語に触発された、 Lisp プログラミング言語の初期に提案された構文でした。表記法は言語に実装されていないため、最終化されることはありませんでした。
ジョン・マッカーシー
S 式と比較して、M 式は関数表記、中置演算子(演算子を含むdefun)、および と の略記を言語condにlist導入します。
コンテンツ
1 バックグラウンド
2 実装
2.1 LISP の場合 2.2 フォーク
3 さらなる発展
4 参考文献
バックグラウンド
John McCarthyは、マサチューセッツ工科大学の研究員だった 1960 年に Lisp に関する最初の論文を発表しました。その中で彼は、複雑な構造をリストとして表すことができるシンボリック式 ( S-expressions ) の言語について説明しました。次に、S 式に対する基本操作のセットと、より複雑な操作を定義するために使用できるメタ式 (M 式) の言語を定義しました。最後に、彼はメタ言語自体を S 式で表現する方法を示し、その結果、潜在的に自己ホスト型のシステムが得られました。この論文のドラフト版は、「AI メモ 8」として知られています。
M 式の例 (LISP 1.5、1965)
式タイプ
数学表記 M式 Modern Lisp S 式
リスト値( 1 2 3 ) { (1,2,3)}
(quote (1 2 3))
関数の適用 へ (X y ) { f(x,y)}
f (f x y)
関数定義s q
あなたa r e :X ↦X ⋅X
{ mathrm {square} :xmapsto xcdot x}
label (define square (lambda (x) (* x x)))
条件式 { −Xもしも X { {begin{cases}-x,&{mbox{if }}x
[lessp minus; T x] (cond (( McCarthy は、M 式を言語構文として使用し、S 式を使用してコンパイラの内部プロセスを記述する自動 Lisp コンパイラ ( LISP 2 ) を開発することを計画していました。Stephen B. Russellはこの論文を読み、S 式の方が便利な構文であると提案しました。McCarthy はこのアイデアを承認しませんでしたが、Russell と同僚の Daniel J. Edwardsは、S 式を実行できるインタープリタープログラムを手作業でコーディングしました。このプログラムは McCarthy の研究グループによって採用され、S 式が Lisp の主要な形式として確立されました。
McCarthy は、1979 年の M 式の運命について次のように述べています。
M 式を正確に定義し、それらをコンパイルするか、少なくとも S 式に変換するプロジェクトは、最終決定も明示的に放棄もされませんでした。それは不確定な未来に後退し、新しい世代のプログラマーが登場し、考案可能な FORTRAN や ALGOL のような表記法よりも内部表記法を好むようになりました。—
Lispの歴史
実装
1988年以降、 Wolfram MathematicaのWolfram言語では、糖化されたM式の形式が実装されています。
Wolframスニペットの例
式タイプ
シュガリング構文 (InputForm)
関数形式 (FullForm)
リスト値
{1, 2, 3} List
関数の適用 f f 関数定義
square = #*# &(ピュア)
square := x*x(パターン)
Set(ピュア)
SetDelayed[square(パターン)(言語の一般的な条件システムはパターン マッチングと書き換えに依存しているため、条件の説明にはさらに時間がかかります。)
LISP の場合
MLispは、Lisp の M 式のようなフロントエンドを実装するための現代 (1968 年から 1973 年) のプロジェクトでした。衛生的なマクロ、パターン マッチング、バックトラッキングなどのいくつかの追加機能が組み込まれました。それは最終的に放棄された LISP70 ドラフトに発展しました。1989 年の M-LISP (MetaLISP) は、M 式を Scheme とブレンドする別の試みでした。
「AI メモ 8」M 式のパーサーはCommon Lispで利用できますが、著者は、マクロに対処できないと認識されているため、M 式に対するケースとしてそれを意図しています。
フォーク
K (プログラミング言語)には、 APL伝統のより簡潔な表記法に加えて、M 式も含まれます。
fibs: { if fibrec:{ if a:list[マイナス] b:list } :fibrec}
さらなる発展
CGOL (1977) はMacLispで実装され、中置演算子を使用して Algol のような構文を導入するという同様の目標に従います。 Armed Bear Common Lispで動作することが知られています。
より最近 (2003 年頃) のバリアントはI 式であり、インデントを使用して暗黙的に括弧を示します。したがって、ある意味で S 式と M 式の中間です。I 式は、Scheme Request For Implementation 49 で、 Schemeの補助構文として導入されましたが、広く採用され
さらに発展したのが「甘い」t-expressionで、優先順位のない中置演算子がI 式と同様に、t 式は S 式からの単純な変換にすぎないため、理論的にはどの Lisp 方言でも使用でき、マクロなどの機能に干渉しません。
追加の構文関連には、Apple のDylan (Algol のようなトークン) とClojureの他のリテラル構文の追加が含まれます。
参考文献
^ 「LISP の実装」 . www-formal.stanford.edu 。2020-03-29取得。
^ 「LISP 1.5 プログラマーズ マニュアル」 (PDF) . Community.computerhistory.org。1965. 2006-02-11のオリジナル (PDF)からのアーカイブ。2013 年9 月 2 日閲覧。
^ ジョン・マッカーシー (1960 年 4月) 「シンボリック式の再帰関数と機械による計算、パート I」
^ マッカーシー、ジョン (1959 年 3月)。「記号式の再帰関数と機械による計算 (AI メモ 8)」 .
^ 「LISPの実装」 . Formal.stanford.edu. 1979-02-12 . 2013 年8 月 24 日閲覧。
^ 書き換え言語としての Mathematica。
^ リー、ザー。「LISP インフィックス構文調査」 .
^ 「M 式のパーサー」 . 初心者はそれらで遊んで、それらがどれほど非現実的であるかを理解しましょう。たとえば、マクロの構文は M 式パーサーによって認識される必要があるため、マクロを使用できなくなったことに注意して
^ Armed Bear Common Lisp 実装のABCL 開発に関する CGOL ブログ。
^ Möller、Egil (2003)。「SRFI 49: インデントに依存する構文」 . srfi.schemers.org。
^ ウィーラー、DA (2013)。「SRFI 110: Sweet-expressions (t-expressions)」 . srfi.schemers.org。”