2012-10-02 38 views
1

每當我定義一個函數說功能(n),那麼我可以將n的值分配給一個不同的變量,如m,以便我可以比較函數內變化的n的值與m的初始值。此外,因爲我有嵌套的,有時是獨立的其他功能,有沒有辦法使m變量具有通用性?將使變量全局解決問題嗎?

我所做的是:

fun funct(n)= let val m=n in if (condition) then... 

此外,這裏本功能調用funct1和funct1調用funct2。該錯誤消息讀取

Error: unbound variable or constructor: m 

爲funct2

Error: unbound variable or constructor: funct1 

爲funct1

Error: unbound variable or constructor: funct1 

用於本功能

我想m的單個校正將解決錯誤的wholse級聯。

+2

你能發表一個完整的例子嗎?很難回答一個不完整的代碼片段。 – pad

回答

1

您可以訪問比定義標識符更深的範圍的任何標識符。

fun funct(n) = 
    let fun funct1(x, y, z) = if n < 1 then ... 
    ... 

在這個例子中,funct1訪問n,已經在外部範圍(即作爲funct的參數)被定義。

不過要小心,像ML函數式語言,識別具有不同於像C.命令式語言有不同的含義在你的榜樣,nm不是變量,這意味着由標識符表示不會改變的值。您只能重新定義標識符;但是,在重定義之前使用標識符的代碼將始終引用該標識符的原始值。