14

2 つの機能が内部で実装されている方法に違いがあるのだろうか? つまり、古い良い式ツリーの上に構築された単なるコード引用ではありませんか?

ありがとう。

4

1 に答える 1

21

2つのタイプは非常に似ていますが、表現が異なります。

  • 見積もりは、より機能的な方法で設計されています。たとえばfoo a b、一連のアプリケーションとして表されますApp(App(foo, a), b)

  • 引用符は、F#でのみ使用可能ないくつかの構成を表すことができ、式ツリーを使用するとそれらが非表示になります。たとえば、宣言Expr.LetRecursive用がありますlet rec

  • 引用は.NET3.0で最初に導入されました。当時、式ツリーはC#式しか表現できなかったため、すべてのF#構造を簡単にキャプチャすることはできませんでした(引用符は命令型を含むすべてのF#式をキャプチャできます)。

  • 見積もりは、再帰を使用して簡単に処理できるようにも設計されています。このExprShapeモジュールには、4つのケースですべての可能な見積もりを処理できるパターンが含まれています(これは、C#で数十のメソッドを使用してビジターパターンを実装するよりもはるかに簡単です)。

F#の見積もりがある場合は、FSharp.Quotations.Evaluatorを使用してC#の式ツリーに変換できます。これは、F#からの式ツリーを期待する.NETAPIを使用している場合に非常に便利です。私の知る限り、その逆の翻訳はありません。

于 2011-11-15T09:28:14.537 に答える