2010-06-10 131 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環境。它還支持源代碼級別的調試,並在斷點處進行任意評估。