库里的选择解决了哪些问题?



我熟悉选择运算符((?)(所做的,这两个参数和匹配都需要两个参数。我们可以定义如下:

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)

这里的好处是,您不需要指定如何枚举所有列表,即逻辑编程语言(如咖喱(根据默认值((默认情况下它的深度优先(搜索(的搜索算法为您完成工作。您只是对结果中的列表看起来像。

的规格。

希望您在以下论文中找到一些更现实的示例。

新功能逻辑设计模式
功能逻辑设计模式

编辑:当我最近发表的有关该主题的工作时,我想添加概率编程的应用。在本文中,我们表明,使用非确定性来建模概率值可以具有基于列表的方法在修剪搜索空间方面的优点。更确切地说,当我们对概率值进行查询时,即基于谓词过滤一个分布时,非确定性的行为与基于列表的方法不太严格,并且可以修剪搜索空间。

最新更新