我熟悉选择运算符 ( (?)
) 的作用,它需要两个参数并匹配它们。我们可以这样定义:
a?_=a
_?b=b
这可用于在两个值之间引入非确定性。但是,我不明白我们为什么要这样做。
可以通过使用解决的问题的示例是(?)
什么?
我熟悉选择运算符 ( (?)
) 的作用,它需要两个参数并匹配它们。我们可以这样定义:
a?_=a
_?b=b
这可用于在两个值之间引入非确定性。但是,我不明白我们为什么要这样做。
可以通过使用解决的问题的示例是(?)
什么?
通常用于激发不确定性的一个示例是计算列表的所有排列的函数。
insert e [] = [e]
insert e (x:xs) = (e : x : xs) ? (x : insert e xs)
perm [] = []
perm (x:xs) = insert x (perm xs)
这里的好处是您不需要指定要如何枚举所有列表,搜索算法是像 Curry 这样的逻辑编程语言(默认为深度优先搜索)为您完成的工作。您只需说明结果中的列表应该是什么样子。
希望您在以下论文中找到一些更现实的例子。
编辑:正如我最近发表的关于该主题的作品,我想添加概率编程的应用程序。在本文中,我们展示了使用非确定性对概率值进行建模可以比基于列表的方法在搜索空间的修剪方面具有优势。更准确地说,当我们对概率值执行查询时,即基于谓词过滤分布时,非确定性的表现不如基于列表的方法那么严格,并且可以修剪搜索空间。