1
我正在編寫一個prolog程序,並且遇到以下問題:我已經定義了謂詞鄰居(+,+,+,+,?),如下所示:Prolog錯誤:未定義的過程,<=涉及
neighbors(X, Y, Height, Width, Neighbors):-
Xup is X-1,
Xdown is X+1,
Yleft is Y-1,
Yright is Y+1,
findall((A,B,C),(
between(Xup, Xdown, A),
between(Yleft, Yright, B),
A>=1,
B>=1),
Neighbors).
現在查詢鄰居(5,5,5,5,X)按預期工作,統一X與它的鄰居列表,即
X = [ (4, 4, _G2809), (4, 5, _G2800), (4, 6, _G2791), (5, 4, _G2782), (5, 5, _G2773), (5, 6, _G2764), (6, 4, _G2755), (6, ..., ...), (..., ...)] .
然而,當我嘗試出現問題添加以下幾行到我的findall目標:
A<=Height,
B<=Width
全謂詞是這樣的:
neighbors(X, Y, Height, Width, Neighbors):-
Xup is X-1,
Xdown is X+1,
Yleft is Y-1,
Yright is Y+1,
findall((A,B,C),(
between(Xup, Xdown, A),
between(Yleft, Yright, B),
A>=1,
B>=1,
A<=Height,
B<=Width
),
Neighbors).
現在同樣的查詢,鄰居(5,5,5,5,X)。導致我得到以下錯誤:
ERROR: Undefined procedure: neighbors/5
ERROR: However, there are definitions for:
ERROR: neighbor/2
ERROR: neighbors/2
false.
可能是什麼原因?我想這是與我比較這些變量的方式有關,但由於寬度和高度被實例化,我認爲這應該工作。謝謝。
它實際上是另一種方式,> =,但這確實是問題,謝謝! – Marcin 2015-04-05 21:04:33
@Marcin你確定嗎?你已經有兩個條件'> =/2',爲什麼你使用相同的運算符再次比較相同的變量(A和B)?,這將是多餘的。 – Yasel 2015-04-05 21:08:37
我試圖找到從1到垂直高度和1到水平寬度編號的網格上的字段(A,B)的鄰居,因此,我希望x> 1且<=高度,並且y要> = 1和<=寬度。 編輯:其實= <非常好,我很抱歉我誤讀了。 – Marcin 2015-04-05 21:13:43