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)).
還是要謝謝你。
emFrente從哪裏來? – m09
這應該是一個生成訂單給螞蟻的算法。這些命令是正確的行爲,以便讓螞蟻挑選所有食物。我只包含了部分功能,但你明白了。順便說一句,「emFrente」意思是「用我的語言直接前進」。 –
我沒有你的問題的答案,但在我看來,你可以用movex(o,Y,R)等語法來簡化movex和movey謂詞: - R是Y -1。等等......同樣代表你的my_avalia謂詞。 – m09