0

同じ長さの 2 つのリストを入力し、1 つのリストの値を別のリストの変数に代入したいと考えています。最初のリストを変数のリストとして、2番目のリストを値として自動的に実現したい。[1,2,3,4,5,6]たとえば、変数のリスト内の要素に値を割り当てたいとします[9,10,11,12,13,14]。つまり、リスト内の 9 の値として 1、10 の値として 2 を割り当てます。

exception error

fun assign([],_) = raise error
  | assign(_,[]) = raise error
  | assign(l::ls,b::ls) = (val l=b ; assign(ls,bs));

問題が少ないことはわかっています。まず、関数は値を返す必要がありますよね? どうすればそれを処理できるかについて何か提案はありますか? つまり、必要に応じて値を割り当てる意味のある関数を作成するということです。

4

1 に答える 1

1

値の代入は、不変型では意味がありません。私はあなたがこれをしたいと思います:

デフォルト値で初期化される int [1,2,3,4,5,6]int参照のリストとリストがあります[ref 0, ref 0, ref 0, ref 0, ref 0, ref 0]。への参照を更新したいと考えてい[ref 1, ref 2, ref 3, ref 4, ref 5, ref 6]ます。

関数を少し変更するだけです。

fun assign([], []) = ()
  | assign(_, []) = raise error
  | assign(_, []) = raise error
  | assign(l::ls, r::rs)= (r := l ; assign(ls, rs))

関数が戻りunit、 を呼び出した後assign、参照のリストに新しい値が保持されます。

ただし、破壊的な更新を伴うこれらのシナリオでは、値の配列を使用する方がはるかに優れています。

于 2012-11-12T11:03:54.933 に答える