Compilation 在F中编译代码引用的最新方法是什么#

Compilation 在F中编译代码引用的最新方法是什么#,compilation,f#,quotations,Compilation,F#,Quotations,我正在建造一个象征性的衍生引擎。比如说 let f = <@ fun x:double -> x * x @> let df = der f 设f=x*x@> 设df=derf 得到的表达式将是 <@ 2 * x @> 实际方程可以是任意复杂的 使用递归算法生成导数并不困难 模式匹配和转换,但最后我想使用 生成的方程在紧密的数值循环中,就像我有手一样 写下来的。这是数值计算代码,所以速度总是更快 更好(如果可能) 我看过FSharpX引号编译器,但它看起来

我正在建造一个象征性的衍生引擎。比如说

let f = <@ fun x:double -> x * x @>
let df = der f
设f=x*x@>
设df=derf
得到的表达式将是

<@ 2 * x @>

实际方程可以是任意复杂的

使用递归算法生成导数并不困难 模式匹配和转换,但最后我想使用 生成的方程在紧密的数值循环中,就像我有手一样 写下来的。这是数值计算代码,所以速度总是更快 更好(如果可能)


我看过FSharpX引号编译器,但它看起来像是一个解释器,而不是编译器。

我还没有测试过这一点,但将F#引号翻译成LINQ表达式(并编译它们)的代码现在已经从F#PowerPack转移到F#Core库中,因此我认为这是最新的版本:

open Microsoft.FSharp.Linq.RuntimeHelpers

LeafExpressionConverter.EvaluateQuotation <@ 1 + 2 @>

注意末尾的转换,将“obj”转换为正确类型的lambda

我也知道maple、matlab、pylab和微积分。我的问题是关于编译代码引用。我的建议是,您可能希望使用固有支持符号操作的语言,而不是尝试在其他语言中实现符号操作。此外,许多人以前也提出过这个问题。只需在Google或StackOverflow上搜索。再次请注意,我的问题是关于代码引用编译,而不是专门关于符号数学。是的,我知道我可以用其他语言做符号数学。那太离题了。非常酷的新东西。除了非常短的非描述性文档,谷歌上没有提及这一点。顺便说一句,如果我有EvaluateQuote y+1@>例如,我得到返回的类型obj。如何将其转换为适当的lambda可用值。我想我需要一个cast。我想很明显的下一个问题是LINQ表达式是如何在运行时和编译时转换为实际代码的?
let d=LeafExpressionConverter.EvaluateQuotation <@ fun y -> y+1.0 @> 
    :?> ( double -> double )

Console.WriteLine(d 10)
11