我如何 return 序言中的数字?

How can I return a number in prolog?

我有一个非常简单的 prolog 程序(我还在学习),我有一个知识库,指定您可以骑自行车到目的地,也可以步行。目标是能够知道如果你可以骑自行车从 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 To 的路线,骑自行车或步行,returns 该路线将花费的分钟数。问题是我不知道如何使 prolog 实际上 return 某些东西,因为直到现在我只进行了 return False 或 true 的查询。我从来没有制作过实际上 return 是一个数字的程序。

与其他语言相反,在 Prolog 中您不需要 return 东西,您只是建立术语之间的关系。您的谓词 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 变量,这将是与查询关联的 "result" .