2012-12-30 41 views
0

編輯:更簡單:計數在序言 - 不可能做

我改變了我的代碼,以簡化。謂詞「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,你有一個清單,通知的路徑,與始發站,運輸的河旁,方向,然後站,你會停下來。如果我們有更多的下一個,這將是通信。在這個例子中:nb_stations([la_defense,rerA,vincennes,charles_de_gaulle_etoile,m6,nation,bir_hakeim],X)。

您從la_defense開始,您將採用「rerA」運輸方式,並將「vincennes」作爲方向。然後你停在「charles_de_gaulle_etoile」,然後你乘坐m6(地鐵),方向是「國家」,然後你抵達「bir_hakeim」。所以我的代碼計算了我在這次旅行中通過的電臺數量。

回答

1

您需要更改訂單X被分配時。

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), 
    nb_stations([SS|Tr],X1), 
    X is X1 + Y. % Change here 

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), 
    nb_stations([SS|Tr],X1), 
    X is X1 + Y. % Change here 
+0

我有你的代碼相同的錯誤,它不知道如何X1和X.對他來說:X1是X + Y> _G1673是_G1546 + 1。 我只想在最後有X = 5的例子,但是當我開始X等於什麼都沒有。 – toshiro92

+0

我編輯了代碼。看來你需要一個小案例來處理一個微不足道的案例。請更詳細地解釋你的代碼需要做什麼,我會盡力提供幫助。 – tempi

+0

我編輯了我的文章,看看:)我詳細解釋 – toshiro92

0

你想要寫什麼?

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), 
    nb_stations([SS|Tr],X is X1+Y). 

可能

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, <== here X1 is a free variable 

    nb_stations([SS|Tr],X). 
+0

只想recup兩個數字,和。減去添加在X: 實施例:ND - NA - > 15-10,我想在X添加,所以X = 5,而每一次添加到X結果。 我有一個錯誤,當我嘗試你的代碼(看我的文章,我編輯它^^) – toshiro92