haskell - haskell 中列表的强制严格性

标签 haskell data-structures lazy-evaluation evaluation strictness

我做了一个非常耗时的算法,它产生一个短字符串作为结果。当我尝试打印它(通过 putStrLn)时,它会一个字符一个字符地显示在屏幕上。我确实明白为什么会发生这种情况,并且我尝试在实际打印之前强制评估字符串。

myPrint !str = putStrLn str

但这帮助甚微。当我在调试中运行程序时,我注意到 !str 强制仅对第一个字符进行求值。

有谁知道这是为什么,以及如何处理这个问题?

最佳答案

(!) 转换为 seq,严格计算为 Weak Head Normal Form ——也就是说,它只计算最外层的构造函数。要更深入地评估,您需要“深度”形式的 seq

这称为deepseq

位于 the deepseq package .

关于haskell - haskell 中列表的强制严格性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558043/

相关文章:

haskell - 如何使这个算法更加懒惰而不重复自己?

python - Python中的惰性求值

Hibernate映射设置lazy = 'false'

Haskell:捕获低级 IO 异常

Scala:使用 StateT monad 转换器组成的 Option 的错误推断类型

algorithm - 拼写检查器 : Ternary Search tree

c++ - 什么数据结构更适合用于存储和排序<int, int>结构?

haskell - Haskell 中的融合是什么?

haskell - 有人能解释一下这段代码中出现 Applicative 实例的位置吗?

algorithm - 大文本中给定关键字的最短短语的长度