Recursion 如何在prolog中返回数字?

Recursion 如何在prolog中返回数字?,recursion,prolog,integer,return,predicate,Recursion,Prolog,Integer,Return,Predicate,我有一个非常简单的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

我有一个非常简单的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)派生出从到、骑自行车或步行的路线,并返回路线将花费的分钟数。问题是,我不知道如何让prolog实际返回一些东西,因为我只做了到目前为止将返回False或true的查询。我从来没有制作过一个实际返回数字的程序。

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

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

  • 如果
    路线(bag\u end,rivendell,M)
    成功,
    M
    应与
    bag\u end
    rivendell
    之间的旅行所需分钟数统一

  • 如果
    路线(X,伦敦,55)
    成功,那么
    X
    是一个距离
    伦敦仅55分钟的城市

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

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