findall里面的findall
Findall inside findall
有可能做出这样的东西吗?
--- 知识库 ---
linha( 5,[bobigny_pablo_picasso,bobigny_pantin_raymon_queneau,eglise_de_pantin,hoche,
porte_de_pantin,ourcq,laumiere,jaures,stalingrad,gare_du_nord,gare_de_l_est,
jacques_bonsergent,republique,oberkampf,richard_lenoir,breguet_sabin,bastille,
quai_de_la_rapee, gare_dausterlitz,saint_marcel,campo_formio,place_ditalie],
[10,2]).
route(71,[louis_blanc,jaures,bolivar,buttes_chaumont,botzaris,place_des_fetes,
pre_saint_gervais],
[10,2]).
--- 知识库结束 ---
sameRoute(EI,NF):-
findall(Y,findall(Z,member(EI,route(Y,Z,_)),NumRout),NumRouteF),
append(NumRout,NumRouteF,NF).
EI是站点,NF应该是return路由中的编号谓词路由的第一个参数。
我做错了什么?
从评论来看,您似乎需要通过给定车站的所有路线 S
。
findall(R, (route(R, Stations, _), member(S, Stations)), Routes).
目标是两个条件的结合:R
是通过站点列表 Stations
的某条路线的编号,而给定的站点 S
是该列表的成员。
?- S = louis_blanc, findall(R, (route(R, Stations, _), member(S, Stations)), Routes).
S = louis_blanc,
Routes = [7, 71].
有可能做出这样的东西吗?
--- 知识库 ---
linha( 5,[bobigny_pablo_picasso,bobigny_pantin_raymon_queneau,eglise_de_pantin,hoche,
porte_de_pantin,ourcq,laumiere,jaures,stalingrad,gare_du_nord,gare_de_l_est,
jacques_bonsergent,republique,oberkampf,richard_lenoir,breguet_sabin,bastille,
quai_de_la_rapee, gare_dausterlitz,saint_marcel,campo_formio,place_ditalie],
[10,2]).
route(71,[louis_blanc,jaures,bolivar,buttes_chaumont,botzaris,place_des_fetes,
pre_saint_gervais],
[10,2]).
--- 知识库结束 ---
sameRoute(EI,NF):-
findall(Y,findall(Z,member(EI,route(Y,Z,_)),NumRout),NumRouteF),
append(NumRout,NumRouteF,NF).
EI是站点,NF应该是return路由中的编号谓词路由的第一个参数。
我做错了什么?
从评论来看,您似乎需要通过给定车站的所有路线 S
。
findall(R, (route(R, Stations, _), member(S, Stations)), Routes).
目标是两个条件的结合:R
是通过站点列表 Stations
的某条路线的编号,而给定的站点 S
是该列表的成员。
?- S = louis_blanc, findall(R, (route(R, Stations, _), member(S, Stations)), Routes).
S = louis_blanc,
Routes = [7, 71].