2010-06-10 80 views

回答

1

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

但是我发现OCaml中的eval的实现,显然使用代码从顶层:

http://thelackthereof.org/OCaml_Eval

+0

我相信你想要的术语是“静态打字” – user102008 2012-01-25 05:06:09

+0

是的,你是对的。 – 2012-02-07 21:34:35

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

0

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

对于保利/ ML这里有一个工作例如:ML REPL

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