我正在考虑一种将 Haskell 中的代数数表示为近似流的方法。您可能可以通过一些求根算法来做到这一点。但这并不好玩。因此,您可以添加x
多项式,将问题减少到找到它的固定点。
所以如果你在 Haskell 中有一个函数,比如
f :: Double -> Double
f x = x ^ 2 + x
我从概念上不明白为什么 fix 不起作用,也就是说,我可以很容易地为自己验证它不起作用,但 0 不是 f 的真正最小不动点吗?是否有另一个简单的(如定义大小)定点函数可以工作?
我正在考虑一种将 Haskell 中的代数数表示为近似流的方法。您可能可以通过一些求根算法来做到这一点。但这并不好玩。因此,您可以添加x
多项式,将问题减少到找到它的固定点。
所以如果你在 Haskell 中有一个函数,比如
f :: Double -> Double
f x = x ^ 2 + x
我从概念上不明白为什么 fix 不起作用,也就是说,我可以很容易地为自己验证它不起作用,但 0 不是 f 的真正最小不动点吗?是否有另一个简单的(如定义大小)定点函数可以工作?
下面是 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
。