ML中有评价吗?

时间:2010-06-10 14:06:03

标签: ocaml eval ml polyml

ML中是否有eval函数?

3 个答案:

答案 0 :(得分:1)

ML实际上只是一种方言,但据我所知,没有我使用过的ML实现(OCaml,F#)。这是有道理的,因为ML使用严格的类型(类型在编译时是已知的)。 Eval会打破这种保证。

但是我确实在OCaml中找到了eval的实现,显然使用了来自顶层的代码:

http://thelackthereof.org/OCaml_Eval

答案 1 :(得分:0)

可以在F#中使用某种eval,但必须引用要评估的代码。

#r"FSharp.PowerPack.dll"
#r"FSharp.PowerPack.Linq.dll"
(* load the PowerPack *)
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.QuotationEvaluation
let x = <@@ 8*11 @@>
x.EvalUntyped() // = 88

有关代码引用的更多信息:http://msdn.microsoft.com/en-us/library/dd233212.aspx

答案 2 :(得分:0)

是的,至少SML / NJ和Poly / ML可以做到这一点:代码在运行时编译并添加到环境中。

对于Poly / ML,这里有一个有用的例子:ML REPL

Poly / ML可以做更多这样的事情,例如在程序控制下管理ML环境。它还支持源级调试,在断点处进行任意评估。