我有一个充满事实的数据库,例如:
overground(newcrossgate,brockley,2).
overground(brockley,honoroakpark,3).
overground(honoroakpark,foresthill,3).
overground(foresthill,sydenham,2).
overground(sydenham,pengewest,3).
overground(pengewest,anerley,2).
overground(anerley,norwoodjunction,3).
overground(norwoodjunction,westcroydon,8).
overground(sydenham,crystalpalace,5).
overground(highburyandislington,canonbury,2).
overground(canonbury,dalstonjunction,3).
overground(dalstonjunction,haggerston,1).
overground(haggerston,hoxton,2).
overground(hoxton,shoreditchhighstreet,3).
例如:newcrossgate 到布罗克利需要 2 分钟。
然后我创建了一个规则,这样如果我输入查询 istime(newcrossgate,honoroakpark,Z)。那么prolog应该给我在这两个站之间旅行的时间。(我制定的规则旨在计算任何两个站点之间的距离,而不仅仅是相邻站点)。
istime(X,Y,Z):- istime(X,Y,0,Z); istime(Y,X,0,Z).
istime(X,Y,T,Z):- overground(X,Y,Z), T1 is T + Z.
istime(X,Y,Z):- overground(X,A,T), istime(A,Y,T1), Z is T + T1.
istime(X,Y,Z):- overground(X,B,T), istime(B,X,T1), Z is T + T1.
它似乎非常适合 newcrossgate 到前几个车站,例如 newcrossgate 到 Foresthill 或 sydenham。然而,在测试 newcrossgate 到 westcroydon 需要 26 分钟之后,我尝试了 newcrossgate 到水晶宫,prolog 说它应该需要 15 分钟......尽管事实上它是 westcroydon 之后的下一站。显然这里出了点问题,但是它适用于大多数车站,但时不时地偶尔会出现错误,谁能告诉我有什么问题吗?:S