Recursion 如何在prolog中返回数字?
我有一个非常简单的prolog程序(我还在学习),其中我有一个知识库,指定你可以骑自行车到你的目的地,也可以步行。我们的目标是能够知道,如果你可以骑自行车从a到b,从b到c步行,那么我们可以问prolog是否有从a到c的路线,所以先骑自行车到b,然后从b到c步行。我使用以下代码执行此操作: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
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
变量的查询,这将是与查询关联的“结果”