给定一组[1,2,3],功率集是唯一的。为什么我们说这是非确定性的?考虑另一个例子
[1,2] >>= \n -> ['a','b'] >>= \ch -> return (n,ch)
为什么这个函数不确定?
如果我认为\ch -> return (n,ch)
是第二个函数,那么第一个函数是什么?
如果第一个功能是
\n -> ['a','b'] >>= \ch -> return (n,ch)
为什么从右到左进行评估。
不应该是\n -> (function)
吗?
这个(['a','b'] >>= \ch -> return (n,ch))
是什么功能?
如果它是从左到右它不能使用第一部分\ch
来评估第二个['a','b']
函数,它不需要对'n'
参数做任何事情。
答案 0 :(得分:12)
在谈论列表monad时,有时会使用术语非确定性的原因是因为指称语义。在为非确定性语言提供语义时,通常使用电源域。可以使用列表在Haskell中近似该域。由于在Haskell中使用monad来自于它们在指称语义中的使用,因此该领域中使用的一些术语已被延续,即使它们在新的语境中可能有意义也可能没有意义。