将全局变量解决问题?

时间:2012-10-02 17:58:58

标签: sml smlnj

每当我定义一个函数say funct(n),那么我可以将n的值赋给不同的变量,例如m,这样我就可以比较函数内变化的n值和m的初始值。此外,由于我有嵌套的,有时独立的其他函数,有没有办法使m变量通用?

我做的是:

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

此外,这里的funct调用funct1和funct1调用funct2。错误消息为

Error: unbound variable or constructor: m

for funct2

Error: unbound variable or constructor: funct1

for funct1

Error: unbound variable or constructor: funct1

for funct

我认为m的单次修正可以解决一系列错误。

1 个答案:

答案 0 :(得分:1)

您可以访问范围内的任何标识符,这些标识符比定义标识符的范围更深。例如,

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

在此示例中,funct1可以访问n,该funct已在外部作用域中定义(即作为n的参数)。

但要注意,在像ML这样的函数式语言中,标识符与C等命令式语言中的标识符具有不同的含义。在您的示例中,m和{{1}}不是变量,意味着由标识符不会改变。您只能重新定义标识符;但是,在重新定义之前使用标识符的代码将始终引用该标识符的原始值。