5

我正在考虑一种将 Haskell 中的代数数表示为近似流的方法。您可能可以通过一些求根算法来做到这一点。但这并不好玩。因此,您可以添加x多项式,将问题减少到找到它的固定点。

所以如果你在 Haskell 中有一个函数,比如

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

我从概念上不明白为什么 fix 不起作用,也就是说,我可以很容易地为自己验证它不起作用,但 0 不是 f 的真正最小不动点吗?是否有另一个简单的(如定义大小)定点函数可以工作?

4

1 回答 1

2

下面是 fix 函数的实现:

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并检查其输入时,fix将无法正常工作,因为无法部分评估 a Double

于 2013-07-28T04:06:39.290 回答