【发布时间】:2011-07-27 19:39:55
【问题描述】:
我有一个路线列表
path(chicago,milwaukee).
path(milwaukee,detroit).
path(chicago,detroit).
path(detroit, newyork).
path(newyork, boston).
path(atlanta,boston).
我有一个谓词路线,它给出了起点和终点之间的所有城市。 例如:
?- routefrom(chicago,newyork,X).
X=[chicago,milwaukee,detroit,newyork]
获取我拥有的所有路线
allroutes(Start,End,P) :- findall(X,pathfrom(Start,End,X),P).
例子:
?- allroutes(chicago,neywork,P).
X=[[chicago,milwaukee,detroit,newyork],[chicago,detroit,newyork]].
我有一个谓词规则goodroute(M),如果路线不包含密尔沃基并且包含芝加哥或纽约,则返回true。
示例:
?- goodroute([chicago, milwaukee,detroit]).
false
?-goodroute([chicago,detroit,newyork,boston]).
true
现在, 我需要过滤掉有 milwaukee 的路线,并从 allroutes 的结果中得到一个有 Chicago 或 newyork 的列表。 我试过了
filerroute :- exclude(maplist(goodroute(findall(X,pathfrom(Start,End,X),P).
我要做的是将goodroute映射到findall的结果上,这样其中一些是真的,一些是假的,而排除会消除错误。 我不确定 exclude 是如何工作的。 如何根据goodroute谓词过滤掉错误的元素,得到一个只有符合真实条件的元素的列表?
【问题讨论】: