Curry中的N-ary函数和Prolog中的N+1-ary关系有什么区别吗?

Curry与它的堂兄 Haskell 不同,它允许您为一个函数赋予多个值:

foo 1 2 = 3
foo 1 2 = 4

它确实回溯(或其他一些搜索)来探索这种非确定性的影响。

这使它类似于 Prolog(特别是?Prolog由于类型系统和语法),您可以在其中声明

foo 1 2 3.
foo 1 2 4.

在语义上,N 元Curry 函数和N+1 元Prolog 关系之间有什么区别吗?

回答

Curry 和 Prolog 之间的区别在于参数和结果之间的依赖关系,这是
Curry 中使用的最佳评估策略的基础
。与 Haskell 类似,Curry 使用惰性(需要)评估策略。这导致以需求驱动的方式探索搜索空间。

例如,表达式

(xs ++ [1]) ++ ys =:= []

在 Curry 中有一个有限的搜索空间(没有任何答案),而等效的 Prolog 目标

?- append(Xs,[1],Zs), append(Zs,Ys,[]).

有无限的搜索空间。类似地,也有一些例子,其中 Curry 计算与 Prolog 相反的解决方案(例如,Curry 允许使用类似于 Haskell 的无限结构进行计算)。

因此,Curry 将 Haskell 的需求驱动评估策略扩展到非确定性编程,而 Prolog 基于严格评估。


以上是Curry中的N-ary函数和Prolog中的N+1-ary关系有什么区别吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>