什么是Haskell中的非决定论?

时间:2014-12-03 07:25:37

标签: haskell

当Haskell程序员提到非决定论时,他们的意思是什么?我读到列表monad可以用于模型非确定性,但肯定列表不是非确定性的?对非决定论进行建模意味着什么?据我所知,这只是意味着为一组计算返回一组所有可能的结果。

1 个答案:

答案 0 :(得分:4)

您的理解是正确的。列表monad捕获的非确定性确实处理可以返回多个可能结果的计算(函数)。

也就是说,从类型f的输入中非确定地计算类型A的输出的计算B然后在Haskell中由一个函数表示,该函数采用类型{{1}的值} 列出

A

然后,如果我们还有计算B - 也是非确定性地从类型f :: A -> [B] 的输入计算g类型的输出,

C

我们可以组合这些计算来获得一个组合计算B,它将g :: B -> [C] 类型的输入转换为h类型的输出:

A

在Haskell中,定义这样的函数C涉及将函数h :: A -> [C] 应用于应用程序h的每个可能结果,然后展平由此获得的{的可能结果列表列表{1}}:

g

这种组合由列表monad捕获,允许你写:

f x

甚至

h