1

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

funct2の場合

Error: unbound variable or constructor: funct1

funct1の場合

Error: unbound variable or constructor: funct1

機能のために

mを1回修正するだけで、エラーのカスケードが解決されると思います。

4

1 に答える 1

1

識別子が定義されているスコープよりも深いスコープから任意の識別子にアクセスできます。例:

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

この例では、は、外部スコープで(つまり、のパラメーターとして)定義されているにfunct1アクセスできます。nfunct

ただし、MLのような関数型言語では、識別子の意味はCのような命令型言語の識別子とは異なります。この例では、変数nmはないため、識別子で示される値は変更されません。再定義できるのは識別子のみです。ただし、再定義の前に識別子を使用するコードは、常にその識別子の元の値を参照します。

于 2012-10-15T08:40:11.160 に答える