【问题标题】:Is there any difference between an N-ary function in Curry and an N+1-ary relation in Prolog?Curry 中的 N 元函数和 Prolog 中的 N+1 元关系之间有什么区别吗?
【发布时间】:2020-12-17 09:20:12
【问题描述】:

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 关系之间有什么区别吗?

【问题讨论】:

    标签: functional-programming prolog logic-programming curry lambda-prolog


    【解决方案1】:

    Curry 和 Prolog 的区别在于依赖关系 论据和结果之间 optimal evaluation strategy 用于咖喱。与 Haskell 类似,Curry 使用惰性(需要) 评价策略。这导致搜索 以需求驱动的方式探索空间。

    例如,表达式

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

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

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

    有无限的搜索空间。同样,也有例子 Curry 计算与 Prolog 不同的解决方案 (例如,Curry 允许使用无限结构进行计算 类似于 Haskell)。

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

    【讨论】:

    • 这很有趣。是否可以在语法上是 Prolog 的语言中使用相同的(惰性)策略,还是需要 Curry 的参数/输出二分法?
    • BTW ?- append(Zs,Ys,[]), append(Xs,[1],Zs). 立即终止。
    • 惰性策略是动态的,即执行顺序由所需的参数决定,而 Prolog 具有更静态的策略。您可以在 Prolog 中模拟惰性求值(实际上,PAKCS 将 Curry 编译为 Prolog)。您的建议与动态重新调度有关,例如通过协同程序,这会导致新问题(例如,由于挣扎而导致的不完整)。因此,您可以在 Prolog 中模拟惰性求值,但不能通过简单的静态子句重新排序来模拟。
    • @MaxB append(Zs,Ys,[]), append(Xs,[1],Zs). 显然终止了,因为第一个文字只有一个可生成的解决方案,即Zs = Ys = [],而第二个解决方案失败:Xs + [1] = []。反过来,append(Xs,[1],Zs), append(Zs,Ys,[]). 是一个无限的失败驱动循环。如果 Prolog 可以提取列表长度上的 CLP(FD) 条件,即 XsLength#>=0,YsLength#>=0,ZsLength#>=0, XsLength+1 #= ZsLength, ZsLength+YsLength #= 0, label([XsLength,YsLength,ZsLength]).,但它失败了,那将会有所作为。遗憾的是仅在特定情况下可用。
    • @DavidTonhofer “遗憾的是,仅在特定情况下可用。” 我相信,在某些情况下,你可能希望它终止,Curry 的搜索也会出现分歧。
    【解决方案2】:

    再想一想之后,我意识到主要区别在于 Prolog 中,两者都

    foo 1 2 3.
    foo 1 2 4.
    

    可以是真的同时,而在库里两者都是

    foo 1 2 == 3
    foo 1 2 == 4
    

    不能同时为真。 (在 PAKCS 中,===:= 返回 Bool

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-05-04
      • 2018-04-10
      • 2017-08-10
      • 2020-07-31
      • 2016-08-31
      • 2017-03-04
      • 2017-04-26
      相关资源
      最近更新 更多