F#引用でグリップを取得するのに数時間を費やしましたが、私はいくつかの道路ブロックに出くわしました。私の必要条件は、識別された共用体型から単純な関数(整数、+、 - 、/、*)を取り出し、最終的にCコードを生成するために使用される式ツリーを生成することです。私はこれが「直接」機能を持つ引用を使用して可能であることを知っています。F#引用 - 値によって表される関数呼び出しへの移動
私の問題は、式ツリーが "値"で終わっているように見えて、その値をどのようにトラバースするのかわかりません。
私の質問は これは実際にこの状況で可能かどうかですか?または検討する価値のある他のアプローチがありますか?
type FuncType =
| A of (int -> int -> int)
| B
| C
[<ReflectedDefinition>]
let add x y = x + y
let myFunc1 = A (fun x y -> x + y)
let myFunc2 = A add
let thefunc expr =
match expr with
| A(x) ->
<@ x @>
| _ ->
failwith "fail"
printfn "%A" (thefunc myFunc1) // prints "Value (<fun:[email protected]>)"
printfn "%A" (thefunc myFunc2) // prints "Value (<fun:[email protected]>)"
printfn "%A" <@ fun x y -> x + y @> // generates usable expression tree
おかげで、それが持っています引用の理解の間隙の多くを埋めることができ、私に前進する道を与えてくれました。 – Jimmy