Haskell中的不确定性是什么?

问题描述 投票:2回答:1

Haskell程序员指的是非确定性是什么意思?我读过列表monads可以用于model不确定性,但是列表肯定不是不确定性的吗?对非确定性进行建模意味着什么?据我所知,这仅意味着为一组计算返回一组所有可能的结果。

haskell
1个回答
4
投票

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

即,从类型f的输入不确定地计算类型B的输出的计算A然后在Haskell中由函数表示,该函数将类型A的值转换为值的[[lists]]类型为Bf :: 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

© www.soinside.com 2019 - 2024. All rights reserved.