【问题标题】:How can I return a number in prolog?如何在序言中返回一个数字?
【发布时间】:2020-03-18 00:05:07
【问题描述】:

我有一个非常简单的序言程序(我还在学习),其中我有一个知识库,指定您可以将自行车带到目的地,也可以步行。目标是能够知道如果你可以骑自行车从 a 到 b,然后通过步行从 b 到 c,那么我们可以询问 prolog 是否有从 a 到 c 的路线,所以首先骑自行车到 b,然后从 b 走到 c。我用以下代码做到了这一点:

bike(a,b,30).
bike(b,c,20).
bike(c,d,25).

route_by_bike(From,To) :- bike(From,To,_).
route_by_bike(From,To) :- bike(From,Z,_), route_by_bike(Z,To).



walk(a,b,10).
walk(b,c,15).
walk(c,d,22).
walk(b,e,35).

route(From,To) :- walk(From,To,_) ; bike(From,To,_).
route(From,To) :- route(From,X), route(X,To)

我现在想创建一个新的谓词,即将谓词 route/2 扩展到 route/3 以便使用谓词 route(From,To,Minutes) 如果存在从 From 到 To 的路由,则可以派生,骑自行车或步行,并返回路线将花费的分钟数。问题是我不知道如何让 prolog 实际上返回一些东西,因为到目前为止我只进行了返回 False 或 true 的查询。我从来没有编写过真正返回数字的程序。

【问题讨论】:

    标签: recursion prolog integer return predicate


    【解决方案1】:

    与其他语言相反,在 Prolog 中您不返回事物,您只是建立术语之间的关系。您的谓词route/3 的意思是:从 A 点到 B 点需要 N 分钟

    根据您的兴趣,所有参数都可能被视为输入或输出:

    • 如果route(bag_end, rivendell, M)成功,则M应与bag_endrivendell之间往返所需的分钟数统一。

    • 如果route(X, london, 55) 成功,则X 是距离london 正好55 分钟路程的城市。

    • 同样,route(A,B,C), C < 10 将尝试统一 ABC 将满足两个目标的所有值(route>),即距离不到 10 分钟路程的几个地方,以及加入它们所需的实际时间。

    因此,您需要建立参数之间的关系,然后您将能够进行专门统一未绑定的Minutes 变量的查询,这将是与查询相关联的“结果”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2011-01-18
      • 2011-11-29
      相关资源
      最近更新 更多