不太理解 Haskell 中并发和并行上下文中的决定论。一些例子会有所帮助。 谢谢
最佳答案
处理纯值时,求值顺序并不重要。这本质上就是并行性的作用:并行评估纯值。与纯值相反,顺序通常对于具有副作用的操作很重要。同时运行操作称为并发。
作为示例,考虑两个操作 putStr "foo"
和 putStr "bar"
。根据评估这两个操作的顺序,输出是“foobar”、“barfoo”或两者之间的任何状态。输出不确定,因为它取决于特定的评估顺序。
再举一个例子,考虑两个值 sum [1..10]
和 5 * 3
。无论这两者的评估顺序如何,它们总是会减少到相同的结果。这种决定论通常只能用纯值来保证。
关于haskell - 为什么并发 Haskell 是非确定性的,而并行 Haskell 原语(par 和 pseq)是确定性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582580/