【发布时间】: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