Curry与它的近亲 Haskell 不同,它允许您为函数提供多个值:
foo 1 2 = 3
foo 1 2 = 4
确实如此 backtracking (或其他一些搜索)来探索这种非决定论的含义。
这使得它类似于 Prolog(特别是 λProlog 由于类型系统和语法),您可以在其中声明
foo 1 2 3.
foo 1 2 4.
从语义上讲,N-ary Curry 函数和 N+1-ary Prolog 关系之间有什么区别吗?
最佳答案
Curry 和 Prolog 的区别在于依赖关系 论证和结果之间的关系是论证的基础 optimal evaluation strategy 用于 curry 。与 Haskell 类似,Curry 使用惰性(需要) 评价策略。这导致搜索 以需求驱动的方式探索空间。
例如,表达式
(xs ++ [1]) ++ ys =:= []
在 Curry 中有一个有限的搜索空间(没有任何答案), 而同等的 Prolog 目标
?- append(Xs,[1],Zs), append(Zs,Ys,[]).
有无限的搜索空间。同样,还有例子 其中 Curry 计算与 Prolog 不同的解 (例如,Curry 允许使用无限结构进行计算 与 Haskell 类似)。
因此,Curry 扩展了需求驱动的评估策略 Haskell 到非确定性编程,而 Prolog 基于严格的评估。
关于functional-programming - Curry 中的 N 元函数和 Prolog 中的 N+1 元关系有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65337793/