7

シンボリック派生エンジンを構築しています。例えば

let f = <@ fun x:double -> x * x @>
let df = der f

結果の式は次のようになります

<@ 2 * x @>

実際の方程式は任意に複雑になる可能性があります。

再帰的なパターンマッチングと変換を使用した導関数の生成はそれほど難しくありませんが、最終的には、生成された方程式を、手書きのようにタイトな数値ループで使用したいと思います。これは数値計算コードであるため、常に高速である方が優れています(可能な場合)

FSharpX引用コンパイラーを見てきましたが、コンパイラーというよりはインタープリターのように見えます。

4

1 に答える 1

7

私はこれをテストしていませんが、F#の引用符をLINQ式に変換する(そしてそれらをコンパイルする)コードがF#PowerPackからF#Coreライブラリに移動したので、これが最新バージョンだと思います。

open Microsoft.FSharp.Linq.RuntimeHelpers

LeafExpressionConverter.EvaluateQuotation <@ 1 + 2 @>

ラムダに使用する

let d=LeafExpressionConverter.EvaluateQuotation <@ fun y -> y+1.0 @> 
    :?> ( double -> double )

Console.WriteLine(d 10)

出力

11

''obj''を正しいタイプのラムダに変換するための最後のキャストに注意してください

于 2013-03-10T16:25:06.013 に答える