• ベストアンサー

StandardMLでxに対して関数fをn回実行した値を求めたい

StandardMLでxに対して関数fをn回実行した値f^n(x)=f(f(f(..(f(x)))))を求める関数ofuncを作りたい。 ('a->'a)*int*'a->'a。ofunc(fn x=>x+1,10,0)ならば10を返す関数。 自分で途中までアルゴリズムなどを考えてみました。 基底:nが0であればnulを返す それ以外であればFの関数をn回実行する fun ofunc(F,n,x)= | if n=0 then nil else ofunc(F,n,x) | n=0回以外の場合のプログラムが分かりません。ご指導をよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

MLに限らず、再帰的なプログラミングは初めてということでしょうか? ofunc() の定義の中で「n回繰り返す」とは考えない方がいいですよ。 リンク先も参照してください。 ofunc(f, n, x) が f^n(x) を表すなら、f^(n-1)(x) の値は ofunc(f, n-1, x) で得られますよね。これでもう答えの7割方書いています。 > nが0であればnilを返すというのは0を返すでよろしいでしょうか。 例えば f(x) = x+0.1 だとして、 n=2: ofunc(f, 2, 5.0) -> 5.2 n=1: ofunc(f, 1, 5.0) -> 5.1 n=0: ofunc(f, 0, 5.0) -> 0 という結果になったら不自然だと思いませんか?

参考URL:
http://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0
yu-ki8877
質問者

お礼

回答して頂きありがとうございました。 なんとかプログラムを書くことができました。 本当に何度もお世話になりました。

その他の回答 (2)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

う~ん、この問題はあまりML固有の知識は要らないんですが… f^1(x) = f(x) f^2(x) = f( f(x) ) f^3(x) = f( f( f(x) ) ) = f( f^2(x) ) f^4(x) = f( f^3(x) ) f^n(x) = f( f^(n-1)(x) ) ところで、xにfを0回適用したらnilというのはおかしくありませんか?

yu-ki8877
質問者

補足

度々すいません。このような問題を解くのが初めてなので、n回繰り返し実行するというところのやり方がいまいち分かりません。 ご指摘いただいた、nが0であればnilを返すというのは0を返すでよろしいでしょうか。 何度も申し訳ありませんが、具体的にプログラムを書いて頂けると助かります。ご指導お願いします。 今まで考えたプログラム fun ofunc(F,n,x)= if n=0 then 0 else

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

f^n(x)を求めるには、f^(n-1)(x)の結果を使うと再帰的に定義できます。

yu-ki8877
質問者

補足

MLについては初心者なので具体的に教えて頂けますでしょうか。 説明されている意味はなんとなく理解できるのですが、 どのようなパターンのときに実行したらいいか分かりません。 よろしくお願いします。