Haskell程序员指的是非确定性是什么意思?我读过列表monads可以用于model不确定性,但是列表肯定不是不确定性的吗?对非确定性进行建模意味着什么?据我所知,这仅意味着为一组计算返回一组所有可能的结果。
您的理解是正确的。 list monad捕获的不确定性确实处理可以返回多个可能结果的计算(函数)。
即,从类型f
的输入不确定地计算类型B
的输出的计算A
然后在Haskell中由函数表示,该函数将类型A
的值转换为值的[[lists]]类型为B
:f :: A -> [B]
然后,如果我们还有计算g
,它也不确定地从C
类型的输入中计算B
类型的输出,
g :: B -> [C]
我们可以组合这些计算以获得组合计算h
,该组合计算将A
类型的输入带到C
类型的输出:
h :: A -> [C]
在Haskell中,定义这样的函数h
涉及将函数g
应用于应用程序f x
的每个可能结果,然后展平由此获得的h
可能结果列表的列表:
h x = concat zs where zs = concat [g y | y <- f x]
列表monad捕获的就是这种构图,允许您编写:
h x = f x >>= g
甚至
h = f >=> g