我在考虑一种在Haskell中表示代数数字作为近似流的方法。您可以通过一些根查找算法来完成此操作。但那没什么好玩的。因此,您可以将x
添加到多项式中,从而减少问题以找到它的固定点。
所以如果你在Haskell中有一个函数,比如
f :: Double -> Double
f x = x ^ 2 + x
我从概念上理解为什么修复不起作用,也就是说,我可以很容易地验证它不起作用,但不是0是f的最小固定点?还有另一个简单的(如定义大小)定点函数可以工作吗?
答案 0 :(得分: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
并检查其输入时,fix
将无效,因为无法部分评估Double
。