「quote」-「eval」と言語の文脈上の同等性は取るに足らないものですか?


13

[1]で、Mitchell Wandは、純粋なラムダ計算にfexprs を追加すると、コンテキスト等価性の理論が単純化されることを実証しました。つまり、2つの用語は、合同であればコンテキスト的に等価です。関連する作業を探索すると、彼は「私達の結果はアルバート・マイヤー[2]の古い観測を延びる行きと文脈の同値は些細なレンダリング」。しかし、[2]を参照すると、見つけられるのは、Meyerによる次の声明だけです。αevalquote

I FiのRSTと言語と考えquote- evalそのようなLISP [3]として機能構文と実行オブジェクト間の型の区別がなかったです。実際にはquote- evalが、ので、LISPで安全に十分だquoteボナFiのデオペレータのような構文上のルックスは、言うようにcond、それは本当に1のように動作しません(それが唯一の解析時に行動を持って、実行していない時間、例えば、1は渡すことはできませんquoteプロシージャへのパラメータとして)。それでも、私は例説得見るためには至っていないquote- eval機能は、価値のあるだったが。

これらのコメントの1つの軽微な欠陥に関係なくcond、手順のパラメーターとして渡される可能性のある推論を読者に誤解させる可能性があります。私が正しく理解していれば、どのようなマイヤーは言ったこと「quote- evalことを意味し、安全に十分だ」quote- eval彼は証拠を提供していませんでしたが、等式理論を矮小化しないことがあります。

編集:

Martinが示唆したように、3つの論文すべてがLISPファミリー言語の取り扱いを引用しているので、同じ設定の下で質問をしましょう。 言語の文脈同値であるquote- eval、特にLISPで、地球上の些細なかではありませんか?

[1]ミッチェル・ワンド、Fexprsの理論は簡単です。Lisp and Symbolic Computation 10(3):189-199(1998)。

[2] Albert Meyer、 公式ソフトウェア開発に関するプログラミングロジックワークショップのパズル。1984

[3]ジョン・マッカーシー、シンボリック式の再帰関数とマシンによるそれらの計算、パートI。1960年4月のACMの通信。


1
質問をより具体的にできるかどうか検討することをお勧めします。eval/ quoteのようなコンストラクトを実装するさまざまな方法と、そのような計算のコンテキスト等価を設計するさまざまなオプションがあります。興味深い最近の関連出版物は、Tahaの井上によるReasoning About Multi-Stage Programsです。
マーティンバーガー

1
主な違いは、CTMP(テンプレートHaskell、Lisp / Scheme / RacketおよびConvergeに例示されるコンパイル時メタプログラミング)とRTMP(Javascriptのeval、MetaOCamlなどのランタイムメタプログラミング)の違いです。 。ここで。私は、このテーマには数ヶ月前、私は怖い、非常に浅いを与え概要話があるコンテクスト等価性に関しては、少しの仕事は主に、メタプログラミングのサポートプログラミングの流動状態に所有している、行われている。
マーティン・バーガー

1
@ plmday:ところで、理想化されたプログラミング言語ワンドは、Fexprs Is Trivialの理論で公式化されており、Lispが行うメタプログラミングとはまったく異なります。前者はRTMPであり、後者(具体的な実装に依存)はそうではありません。
マーティンバーガー

1
@MartinBerger:あなたの講演をpdfとして投稿できますか?
デイブクラーク

1
@デイブクラーク、確かに、ここにある!フィードバックを歓迎します。
マーティンバーガー

回答:


2

最初に、これは完全にコンテキストのセットになるためにあなたが取るものに依存します。場合は(quote [])コンテキストがあり、その後、コンテキスト等価性は構文上等価です。

伝統的に、文脈的同等性の文脈は、言語での意味が何であれ、「式」が現れる文脈とみなされます。これ"[]"は、コンテキストが文字列リテラル内に引数を配置するようなコンテキストを除外します。これらの種類のコンテキストも、IIRCが、Quineが最初に参照の透明性を説明したときに除外しました。

この観点から、私(quote [])もコンテキストではないと思います。代わりに、コンテキストは、関数の本体やアプリケーションの引数など、式の評価が発生する可能性がある場所です。

潜在的に問題のあることは、これは、マクロを含むLispプログラム(またはRacketまたはSchemeプログラム)では、潜在的に終了しないマクロ展開プロセスを実行するまでコンテキストがわからないことを意味します。あります。これが問題だと思うかどうかは、技術的な問題というよりも哲学的な問題です。


私は除外するための一つの方法があると思いませんか(quote [])治療の考え方却下:コンテキストとして、かなり希望的観測よりも、'datumためにシンタックスシュガーとして(quote datum)、その後は、'[]のように、"[]"もはや文脈です。quoteとにかくスキームマクロは不明瞭になっています。

@day、あなたのコメントがわかりません。なぜ関係ない'datum(quote datum)何も変更は?
サムトビンホッホシュタット14年

場合はquote言語構造であると'datumしdesugars (quote datum)、人々はより多くの可能性が高いことが主張するだろう(quote [])文脈です。quoteコア言語から削除するが、リテラル'datum構文をサポートしている場合、類似するもの"[]"はコンテキストではないことがよく知られいるため、そう主張する可能性は低くなります。

@day、これは誤解です。「コンテキスト」の正しい定義はありません。異なるコンテキストがコンテキスト等価性の異なる概念をサポートしているだけです。たとえば、空白は"[]"コンテキストでは意味的に重要ですが、コンテキストでは重要ではありません(quote [])。「人々」が主張するかもしれないものは、ここにもそこにもありません。
サムトビンホッホシュタット14年

コンテキストの正しい定義が1つもないことに同意します。しかし、抽象構文に基づいた伝統的な定義が1つあります。これは、Wandが彼の論文で使用し、Meyerが彼の記事で使用するもので、Lispのコンテキスト等価性の状態を疑問視するために使用します。あなたが提案したのは、コンテキストの従来の定義を評価コンテキストに置き換えることです。私が提案したのは、コンテキストの従来の定義を維持quoteし、抽象的な構文から削除しますが、(スペースに意味のない)引用の(具体的な)リテラル構文をサポートすることです。私が見ることができるものから、両方の方法は元の質問に「いいえ」につながります。
14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.