Curry 中的 N 元函数和 Prolog 中的 N+1 元关系有什么区别吗?
Is there any difference between an N-ary function in Curry and an N+1-ary relation in Prolog?
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
用于咖喱。和Haskell类似,Curry使用了一个lazy(needed)
评价策略。这导致搜索
space 以需求驱动的方式探索。
例如,表达式
(xs ++ [1]) ++ ys =:= []
在 Curry 中进行了有限搜索 space(没有任何答案),
而等效的 Prolog 目标
?- append(Xs,[1],Zs), append(Zs,Ys,[]).
有一个无限搜索space。同样,还有例子
Curry 计算与 Prolog 对比的解决方案
(例如,Curry 允许使用无限结构进行计算
类似于 Haskell).
因此,库里扩展了需求驱动的评估策略
Haskell 到非确定性编程,wheras Prolog
基于严格的评估。
在进一步思考之后,我意识到主要区别在于在 Prolog 中,两者
foo 1 2 3.
foo 1 2 4.
可以同时,而在库里
foo 1 2 == 3
foo 1 2 == 4
不能同时为真。 (在 PAKCS 中,==
和 =:=
return Bool
)
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 用于咖喱。和Haskell类似,Curry使用了一个lazy(needed) 评价策略。这导致搜索 space 以需求驱动的方式探索。
例如,表达式
(xs ++ [1]) ++ ys =:= []
在 Curry 中进行了有限搜索 space(没有任何答案), 而等效的 Prolog 目标
?- append(Xs,[1],Zs), append(Zs,Ys,[]).
有一个无限搜索space。同样,还有例子 Curry 计算与 Prolog 对比的解决方案 (例如,Curry 允许使用无限结构进行计算 类似于 Haskell).
因此,库里扩展了需求驱动的评估策略 Haskell 到非确定性编程,wheras Prolog 基于严格的评估。
在进一步思考之后,我意识到主要区别在于在 Prolog 中,两者
foo 1 2 3.
foo 1 2 4.
可以同时,而在库里
foo 1 2 == 3
foo 1 2 == 4
不能同时为真。 (在 PAKCS 中,==
和 =:=
return Bool
)