9

これは非常に初心者の質問かもしれませんが、答えは見つかりませんでした。たとえばリストを保存し、後で同じポインタの下で別のリストに置き換える必要があります。

4

1 に答える 1

13

それは参照を介して行うことができます:

let fact n =
  let result = ref 1 in (* initialize an int ref *)
  for i = 2 to n do
    result := i * !result (* reassign an int ref *)
   done;
  !result

再帰関数または高階関数内で不変の値を使用して同じことを実行できるため、参照はあまり表示されません。

let fact n =
   let rec loop i acc =
      if i > n then acc
      else loop (i+1) (i*acc) in
   loop 2 1

副作用のないソリューションは、推論が容易で、正確性を確保するのが容易であるため、推奨されます。

于 2012-04-03T23:07:48.143 に答える