1

Ocaml で固定小数点反復を実装する方法を理解しようとしています。つまり、関数fとが与えられた場合x、最終的な値がどうf(f(f(x)...))なるかを計算したいと思います。

たとえば、関数が で がx/2の場合x=50、答えは 0 になるはずです。

これまでのところ、私は

 let rec computed_fixed_point eq f x =
        if (x == f x) then 
            x
        else
            computed_fixed_point eq f (f x)

これは関数x/2and x=50(私に 0 を与えます) に対しては機能しますが、無限大または 0 以外の関数に対しては機能しないようです。

別のアドバイスをいただけますか?ありがとう!

4

1 に答える 1

6

この問題の論理的根拠を理解するのは少し難しいです。すべての関数に固定小数点があるわけではありません。たとえばfun x -> (x + 1) mod 5。不動点を持つすべての関数が、異なる開始点から繰り返し適用することによって不動点に到達するわけではありません。(私はグーグルをしただけで、このような不動点は「魅力的な不動点」と呼ばれます。)

ここにいくつかのコメントがあります:

  • ==物理的等式演算子である、は使用しないでください。=値の同等性を使用したい場合があります。

  • eqただし、パラメータの目的がわかりません。おそらく、呼び出し元は使用する等式を指定できます。その場合は、の代わりにこれを使用する必要があります==

于 2013-01-20T03:11:26.327 に答える