【发布时间】:2019-07-25 01:14:44
【问题描述】:
给定定义,定点组合器并不总是产生正确的答案:
fix f = f (fix f)
以下代码不会终止:
fix (\x->x*x) 0
当然,fix 不能总是给出正确的答案,但我想知道,这可以改进吗?
当然对于上面的例子,我们可以实现一些看起来像
的修复fix f x | f x == f (f x) = f x
| otherwise = fix f (f x)
并给出正确的输出。
为什么不使用上面的定义(或者更好的,因为这个只处理带有 1 个参数的函数)的原因是什么?
【问题讨论】:
-
定点组合器总是返回正确的结果,但它可能不是你想要的结果,因为它经常涉及底部。
-
如果您对
fix的深层含义感兴趣,请阅读以下内容:en.wikibooks.org/wiki/Haskell/Denotational_semantics
标签: haskell fixpoint-combinators fixed-point-iteration