Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中使用Data.Map实现inc函数_Haskell_Lazy Evaluation - Fatal编程技术网

在Haskell中使用Data.Map实现inc函数

在Haskell中使用Data.Map实现inc函数,haskell,lazy-evaluation,Haskell,Lazy Evaluation,我尝试使用Data.Map重新实现一个简单的增量函数。然而,迫不及待地让我的程序挂起: apply :: Num a => (a, a) -> (a, a) apply (a, b) = (a + 1, b + 1) inc :: Map Int Int inc = fromList (iterate apply (0, 1)) inc ! 1 -- program freezes... 我不明白为什么它会结冰?为什么它如此急切?它必须在查找元素之前构建并组织映射(由于映射作为二

我尝试使用
Data.Map
重新实现一个简单的增量函数。然而,迫不及待地让我的程序挂起:

apply :: Num a => (a, a) -> (a, a)
apply (a, b) = (a + 1, b + 1)

inc :: Map Int Int
inc = fromList (iterate apply (0, 1))
inc ! 1 -- program freezes...

我不明白为什么它会结冰?为什么它如此急切?

它必须在查找元素之前构建并组织
映射
(由于
映射
作为二进制搜索树的内部实现)
lookup 1(iterate apply(0,1))
没有这样的问题,因为它不需要创建搜索树,它只是遍历列表,忽略了无限尾部。我制作了这样的贴图,可以让它变得懒惰。