我有充分的事实,如数据库:序言 - 帮助固定规则
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到Brockley的需要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.
它似乎适用于新的crossgate到第一对情侣站,比如newcrossgate到foresthill或sydenham。然而,在测试新赛季到westcroydon需要26分钟后,我尝试了新的crossgate进行crystalpalace,prolog说应该花费15分钟......尽管事实上它是westcroydon之后的下一站。很显然,这里有些事情是错误的,但是它对大多数电台都有效,偶尔会偶尔出现一些错误,谁能告诉我什么是错的? :S
最后一项是否正确?你似乎从X到B,然后从B到X.你什么时候去Y? – mgibsonbr 2012-01-13 23:32:39