質問: フードの下で2つの機能がどのように実装されているかに違いがあるのだろうか?つまり、古い良い表現木の上に構築されたコード引用だけではありませんか? ありがとう。
回答: 2つのタイプはかなり似ていますが、表現は異なります。 * 引用はより機能的な方法で設計されています。たとえば、 `foo ab`は一連のアプリケーション`App(App(foo, a), b)`として表されます。 * 引用は、F#でのみ利用可能ないくつかの構文を表すことができ、式ツリーを使用することでそれらを隠すことができます。たとえば、 `let rec`宣言には`Expr.LetRecursive`があり`Expr.LetRecursive` * 引用は.NET 3.0で初めて導入されました。当時の表現木はC#表現しか表現できなかったので、すべてのF#構造体を簡単に捕捉することはできませんでした(引用文は、命令型命令を含むF#式を取り込むことができます)。 * 引用は、再帰を使用して容易に処理できるようにも設計されています。 `ExprShape`モジュールには、4つのケースですべての可能な見積もりを処理できるパターンが含まれています(これは、C#で数十のメソッドを持つビジターパターンを実装するよりも簡単です)。 F#の引用符を使用すると、 FSharp.Quotations.Evaluatorを使用してC#の式ツリーに変換できます。これは、F#の式ツリーが必要な.NET APIを使用している場合には非常に便利です。私が知る限り、逆の翻訳はありません。