2011-11-30 52 views
0

所以我有這段序言代碼:導致的說法是不正確

my_avalia(A, R) :- 
    A == "Koza" -> koza(R, 0, 0, e, 89). 

koza(R, _, _, _, 87) :- 
    !, 
    write(R). 

koza(R, X, Y, V, C) :- 
    movex(V, X, X1), 
    movey(V, Y, Y1), 
    confirma(X1, Y1, Z), 
    Z == 1 -> (append(R, [emFrente], U), 
      L is (C - 1), 
      koza(U, X1, Y1, V, L)). 

此事的是,當我寫的「R」的講座(),它有正確的價值觀,但是當我這樣稱呼它時,它以my_avalia中的空列表結束:

my_avalia(「Koza」,R)。

我的遞歸可能不正確,但我真的不知道它有什麼問題。 在此先感謝。

其他功能:

movex(X,Y,R):-(X==o)->(R is Y-1). 
movex(X,Y,R):-(X==n)->(R is Y). 
movex(X,Y,R):-(X==s)->(R is Y). 
movex(X,Y,R):-(X==e)->(R is Y+1). 

movey(X,Y,R):-(X==n)->(R is Y-1). 
movey(X,Y,R):-(X==s)->(R is Y+1). 
movey(X,Y,R):-(X==o)->(R is Y). 
movey(X,Y,R):-(X==e)->(R is Y). 

confirma(X,Y,R):-(santafe(X,Y),R is 1); (R is 0). 

我想通了。這樣一個愚蠢的錯誤。

koza([], _, _, _, 87) :-!. 
koza(R, X, Y, V, C) :- 
    movex(V, X, X1), 
    movey(V, Y, Y1), 
    confirma(X1, Y1, Z), 
    Z == 1 -> (L is (C - 1), 
      koza(U, X1, Y1, V, L), 
      append(U, [emFrente], R)). 

還是要謝謝你。

+0

emFrente從哪裏來? – m09

+0

這應該是一個生成訂單給螞蟻的算法。這些命令是正確的行爲,以便讓螞蟻挑選所有食物。我只包含了部分功能,但你明白了。順便說一句,「emFrente」意思是「用我的語言直接前進」。 –

+1

我沒有你的問題的答案,但在我看來,你可以用movex(o,Y,R)等語法來簡化movex和movey謂詞: - R是Y -1。等等......同樣代表你的my_avalia謂詞。 – m09

回答

0
koza([], _, _, _, 87) :-!. 
koza(R, X, Y, V, C) :- 
    movex(V, X, X1), 
    movey(V, Y, Y1), 
    confirma(X1, Y1, Z), 
    Z == 1 -> (L is (C - 1), 
      koza(U, X1, Y1, V, L), 
      append(U, [emFrente], R)). 
相關問題