2013-07-26 3 views
5

私はハスケルの代数的数を近似の流れとして表現する方法を考えていました。あなたはおそらくいくつかのルート発見アルゴリズムによってこれを行うことができます。しかし、それは楽しいことではありません。だから、xを多項式に追加して、問題を固定小数点にすることを減らすことができます。多項式で固定小数点関数を使用できますか?

あなたは

f :: Double -> Double 
f x = x^2 + x 

のようなHaskellの関数を持っている場合、修正プログラムは動作しません。だから、なぜ私は概念的に言うことである、理解していない、私は簡単にそれが動作しないことを自分のために確認することができますfの真の最小固定点は0ではない?固定小数点関数のように単純な(定義サイズのように)機能するのでしょうか?ここで

+6

'fix'は、多くの場合⊥(非終了、エラー、...)である最小の_defined_固定点を見つけます。参照:http://stackoverflow.com/a/8099449/700253 – Vitus

+0

これは非常に良い質問ですが、あまりにも抽象的なにする必要はありません。私は良い答えを策定しようとしています。 – hivert

+2

vitusが述べているように、fixが最小の固定小数点を見つける順序は、Doubleの通常の順序ではなく、ドメインの順序です。 – augustss

答えて

2

は修正機能の実装です:

fix :: (a -> a) -> a 
fix f = let x = f x in x 

それはDoubleのようなプリミティブ型では動作しません。より複雑な構造を持つ型を対象としています。例えば:それはその入力を読み込むよりも速く、その結果についての情報が得られているため

g :: Maybe Int -> Maybe Int 
g i = Just $ case i of 
    Nothing -> 3 
    Just _ -> 4 

この機能はfixで動作します。言い換えれば、Just部分は、iをまったく見ずに知られているため、固定小数点に達することができます。

機能がDouble -> Doubleの場合は、入力を調べますは部分的にDoubleを評価する方法がないため機能しません。

関連する問題