haskell - 你会写 seq x x 吗?

标签 haskell lazy-evaluation

我不完全清楚 seq 在 Haskell 中的工作原理。

似乎在很多情况下编写会很有用

seq x x

甚至可以定义一个函数:
strict x = seq x x

但是这样的功能还不存在,所以我猜这种方法在某种程度上是错误的。有人可以告诉我这是否有意义或有用吗?

最佳答案

seq a b返回 b 的值, 但使该值取决于 a 的评估.因此,seq a aa 完全相同.

我认为这里的误解是 seq不采取任何行动,因为纯函数不采取行动,它只是引入了依赖关系。

有一个功能evaluate :: a -> IO ()Control.Exception这就是你想要的(注意它在 IO 中)。他们将其置于异常中,因为查看表达式的求值是否会抛出异常很有用,如果是,则处理异常。

关于haskell - 你会写 seq x x 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23570589/

相关文章:

haskell - 对于没有 `otherwise` 子句的 Haskell 函数,模式匹配是非详尽的

java - 在没有静态嵌套类的情况下按需初始化多个静态变量?

haskell - 惰性求值与宏

流与单子(monad)

algorithm - 如何让这段Haskell代码更简洁?

haskell - "bracket (mallocBytes n) free"和 "allocaBytes"有什么区别?

haskell - haskell中的斐波那契序列返回所有值

perl - 惰性属性强制

list - 理解递归定义的列表(用 zipWith 表示的 fibs)

Haskell 重叠/不连贯的实例