1

有可能做这样的事情吗?

---知识库---

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它应该返回路由中的数字,谓词路由的第一个参数。

我究竟做错了什么?

4

1 回答 1

1

从评论看来,您需要通过给定车站的所有路线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].
于 2015-01-08T18:34:47.713 回答