编辑:更简单:
我更改了代码以简化。谓词“nbarret”返回我想要的电台数量。
所以有我的新代码,但它不会改变任何东西:
nb_stations([],0).
nb_stations([S,Li,Dir,SS],X):-nbarret(Li,S,SS,Dir,Y),X is X1 + Y.
nb_stations([S,Li,Dir,SS|Tr],X):-
nbarret(Li,S,SS,Dir,Y),nb_stations([SS|Tr],X is X1 + Y).
在这种情况下,我有一个错误:
ERROR: is/2: Arguments are not sufficiently instantiated
Exception: (8) (_G2031 is _G2270+1)is _G2711+5 ? creep
Exception: (7) nb_stations([charles_de_gaulle_etoile, m6, nation, bir_hakeim], _G2031 is _G2270+1) ? creep
Exception: (6) nb_stations([la_defense, rerA, vincennes, charles_de_gaulle_etoile, m6, nation, bir_hakeim], _G2031) ? creep
/---------------------------------------------------- ------------/
旧代码(已弃用,我保留理解):
nb_stations([S,Li,Dir,SS|Tr],X):-num_stations(S,Li,Dir1,ND,_,_),Dir=Dir1,!,
num_stations(SS,Li,Dir1,NA,_,_),Dir=Dir1,!,
calculer(ND,NA,Y),X is X1 + Y,nb_stations([SS|Tr],X).
nb_stations([S,Li,Dir,SS|Tr],X):-num_stations(S,Li,_,_,Dir2,ND),!,
num_stations(SS,Li,_,_,Dir2,NA),!,
Dir=Dir2,!,calculer(ND,NA,Y),X is X1 + Y,nb_stations([SS|Tr],X).
calculer(ND,NA,X):-X is ND - NA.
更多细节 :
当您调用 nb_stations 时,您必须告知 List 中的路径,包括出发站、交通工具的线路、方向,然后是您将停止的车站。如果我们接下来还有更多,那就是信件。在此示例中:nb_stations([la_defense,rerA,vincennes,charles_de_gaulle_etoile,m6,nation,bir_hakeim],X)。
您从 la_defense 开始,乘坐“rerA”运输,然后乘坐“vincennes”作为方向。然后停在“charles_de_gaulle_etoile”,乘坐m6(地铁),方向是“nation”,到达“bir_hakeim”。所以我的代码计算了我在这次旅行中经过的车站数量。