当Haskell程序员提到非决定论时,他们的意思是什么?我读到列表monad可以用于模型非确定性,但肯定列表不是非确定性的?对非决定论进行建模意味着什么?据我所知,这只是意味着为一组计算返回一组所有可能的结果。
答案 0 :(得分:4)
您的理解是正确的。列表monad捕获的非确定性确实处理可以返回多个可能结果的计算(函数)。
也就是说,从类型f
的输入中非确定地计算类型A
的输出的计算B
然后在Haskell中由一个函数表示,该函数采用类型{{1}的值} 列出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