Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何从表达式集合创建单引号表达式?_.net_F#_Quotations - Fatal编程技术网

.net 如何从表达式集合创建单引号表达式?

.net 如何从表达式集合创建单引号表达式?,.net,f#,quotations,.net,F#,Quotations,我有一组(子)引用表达式,它们都是在程序的前一步中创建的。现在,我希望能够控制单个大引号表达式的创建,该表达式表示集合中子表达式的某些组合和聚合,但无法让编译器或运行时进行协作 我的代码示例如下: [<EntryPoint>] let main argv = let expr0 = <@ fun (r : float[]) -> r.[1] @> let expr1 = <@ fun (r : float[]) -> 1.0 + r.

我有一组(子)引用表达式,它们都是在程序的前一步中创建的。现在,我希望能够控制单个大引号表达式的创建,该表达式表示集合中子表达式的某些组合和聚合,但无法让编译器或运行时进行协作

我的代码示例如下:

[<EntryPoint>]
let main argv = 

    let expr0 = <@ fun (r : float[]) -> r.[1] @>
    let expr1 = <@ fun (r : float[]) -> 1.0 + r.[0] @>
    let expr2 = <@ fun (r : float[]) -> 10.0 * r.[0] @>
    let expr3 = <@ fun (r : float[]) -> r.[0] * r.[1] @>
    let expr4 = <@ fun (r : float[]) -> (r.[0]-2.0) / (r.[1]-9.0) @>

    let exprs = [|expr0; expr1; expr2; expr3; expr4|]

    let arbInput = [|1.0; 2.0; 3.0; 4.0; 5.0|]
    let arbOrder = [|0;4;1;3;4;2|]

    let tree = <@ arbOrder |> Array.map (fun x -> (%(exprs.[x]) <| arbInput)) @> //cannot use the variable `x` as part of a spliced expression 
    printfn "%A" tree

    System.Console.ReadLine() |> ignore
    0
[]
让主argv=
设expr0=r[1]@>
设expr1=1.0+r[0]@>
设expr2=10.0*r[0]@>
设expr3=r[0]*r[1]@>
设expr4=(r[0]-2.0)/(r[1]-9.0)@>
设exprs=[| expr0;expr1;expr2;expr3;expr4 |]
让arbInput=[|1.0;2.0;3.0;4.0;5.0 |]
设arbOrder=[0;4;1;3;4;2]
let tree=Array.map(fun x->((exprs.[x])//不能将变量'x'用作拼接表达式的一部分
printfn“%A”树
System.Console.ReadLine()|>忽略
0
在强制此行为的其他尝试中收到的其他错误包括:“无法将“%”和“%”视为第一类…”

我尝试了回答中提到的步骤:但我无法找到解决方案


如何实现这一点?

代码中的问题是
x
是一个带引号的变量,您试图在构建引号时使用它的值,这是不可能的。
x
的使用不能在未带引号的部分。为此,您需要使用
Expr
函数从中创建
Expr
ode>Expr[]:

let makeQuotedArray (exprs: Expr<'T>[]) : Expr<'T[]> =
    Expr.NewArray(typeof<'T>,
        exprs |> Array.map (fun e -> e :> Expr) |> List.ofArray)
    |> Expr.Cast

let exprs = makeQuotedArray [|expr0; expr1; expr2; expr3; expr4|]

let tree = <@ arbOrder |> Array.map (fun x -> (%exprs).[x] arbInput) @>
让MakeQuoteArray(exprs:Expr=
Expr.NewArray(typeof