示例数据库:
any(a,b,2).
any(b,c,2).
any(c,d,3).
any(d,e,1).
any(e,f,3).
键:(Station1,Station2,Time)
。
问题:
将(station1,time)
输入prolog并让它返回所有可到达的电台。
例如:
如果输入:(b,2)
。
输出应为:'a'和'c'
这是因为在'2'分钟内从电台'b',你可以到达电台'a'和'c',因为它们在输入时间范围内。
我已经厌倦了使用列表和递归但没有运气,任何帮助/建议?
reachable(Station1, Limit, Result) :-
reachable(Station1, Limit, 0, 0, Result).
reachable(Station1, Visited, TimeSpent, Limit, Result) :-
overground(Station1,Station2,Time),
Visited is Limit - Time,
Limit =< TimeSpent,
Result = [Station2];
overground(Station1, Waypoint, Time),
NewVisited is Visited - Limit,
NewTimeSpent is TimeSpent - NewVisited,
reachable(Waypoint,Station2, NewTimeSpent, NewVisited,Result).
&LT;&LT;&LT;我试过的东西,但似乎没有工作X_X
答案 0 :(得分:2)
那么,让我们看看问题:
any(MyStation, Y)
或any(Y, MyStation)
,因此在使用any/3
时您需要断开连接。< / LI>
解决方案的一般外观:
第一步,调用工作谓词:
reachable(From, Limit, Result) :-
...
...
应该是对可达/ 5的调用(这一个+ 2个累加器)。
第二步,工作谓词:
reachable(From, Visited, TimeSpent, Limit, Result) :-
...
...
应符合这些准则:
如果您需要更精确的建议,我建议您发布您已经完成的工作,以便我们可以在那里工作!