首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么让y=1+y编译,它是什么意思?

为什么让y=1+y编译,它是什么意思?
EN

Stack Overflow用户
提问于 2014-12-19 07:15:59
回答 1查看 1.6K关注 0票数 17

在GHCi中,let y = y + 1编译得很好,但是当我尝试计算y时,得到的结果是*** Exception: <<loop>>

为什么没有编译错误?<<loop>>是什么意思?

EN

回答 1

Stack Overflow用户

发布于 2015-01-09 04:11:47

我想添加一个最小的例子来说明这在哪里可能是有用的。

代码语言:javascript
复制
data Peano = Z | S Peano

instance Num Peano where
    p + Z     = p
    p + (S q) = S (p + q)
    fromInteger 1 = S Z

instance Eq Peano where
    Z     == Z     = True
    Z     == _     = False
    _     == Z     = False
    (S p) == (S q) = p == q

instance Ord Peano where
    Z     `compare` Z     = EQ
    Z     `compare` _     = LT
    _     `compare` Z     = GT
    (S p) `compare` (S q) = p `compare` q

y :: Peano
y = y + 1

main :: IO ()
main = print $ 1 < y

在这种情况下,y是无穷大的,直到同构。(不过,我的fromInteger显然是一个糟糕的实现,因此在不修复fromInteger的情况下将文字1更改为其他值将失败。)

注意,这只是因为我定义的(+)在它的第一个参数中是惰性的,并且我定义的compare也足够惰性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27557380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档