Haskell 哈斯克尔的非决定论是什么?
Haskell程序员提到非决定论是什么意思?我读到列表单子可以用来模拟非确定性,但列表肯定不是非确定性的吗?对非决定论建模意味着什么?据我所知,这只意味着返回一组计算的所有可能结果。您的理解是正确的。列表单子捕捉到的不确定性确实处理可以返回多个可能结果的计算(函数) 也就是说,从Haskell 哈斯克尔的非决定论是什么?,haskell,Haskell,Haskell程序员提到非决定论是什么意思?我读到列表单子可以用来模拟非确定性,但列表肯定不是非确定性的吗?对非决定论建模意味着什么?据我所知,这只意味着返回一组计算的所有可能结果。您的理解是正确的。列表单子捕捉到的不确定性确实处理可以返回多个可能结果的计算(函数) 也就是说,从a类型的输入不确定地计算B类型的输出的计算f然后在Haskell中由一个函数表示,该函数将a类型的值取为B类型的值列表: f :: A -> [B] 然后,如果我们还有计算g,它也从B类型的输入不确定地计算C类型
a
类型的输入不确定地计算B
类型的输出的计算f
然后在Haskell中由一个函数表示,该函数将a
类型的值取为B
类型的值列表:
f :: A -> [B]
然后,如果我们还有计算g
,它也从B
类型的输入不确定地计算C
类型的输出
g :: B -> [C]
我们可以组合这些计算以获得组合计算h
,该计算将a
类型的输入转换为C
类型的输出:
h :: A -> [C]
在Haskell中,定义这样一个函数涉及将函数g
应用于应用的每个可能结果fx
,然后将由此获得的h
可能结果列表展平:
h x = concat zs where zs = [g y | y <- f x]
甚至
h = f >=> g
你的理解是正确的。列表单子捕捉到的不确定性确实处理可以返回多个可能结果的计算(函数) 也就是说,从
a
类型的输入不确定地计算B
类型的输出的计算f
然后在Haskell中由一个函数表示,该函数将a
类型的值取为B
类型的值列表:
f :: A -> [B]
然后,如果我们还有计算g
,它也从B
类型的输入不确定地计算C
类型的输出
g :: B -> [C]
我们可以组合这些计算以获得组合计算h
,该计算将a
类型的输入转换为C
类型的输出:
h :: A -> [C]
在Haskell中,定义这样一个函数涉及将函数g
应用于应用的每个可能结果fx
,然后将由此获得的h
可能结果列表展平:
h x = concat zs where zs = [g y | y <- f x]
甚至
h = f >=> g
也许会有帮助。可能会有帮助。非常感谢。我还没有在其他地方看到如此清晰的解释。非常感谢。我还没有看到其他地方如此清楚地解释这一点。