我是Prolog的新手。我正在編寫Prolog代碼來解決一個難題,它需要我在二維數字網格中找到重複項。使用Prolog在網格中查找同一行和列中的副本
我的輸入是這樣的:
grid(1,1,1).
grid(2,1,2).
grid(2,1,3).
grid(5,1,4).
grid(3,2,1).
grid(4,2,2).
grid(5,2,3).
grid(9,2,4).
grid(6,3,1).
grid(7,3,2).
grid(2,3,3).
grid(8,3,4).
grid(4,4,1).
grid(5,4,2).
grid(1,4,3).
grid(3,4,4).
代表矩陣:
1 2 2 5
3 4 5 9
6 7 2 8
4 5 1 3
我試圖像被東西代碼:
finddup(N,X,Y):-
a is X, b is Y,
print('Rule 1 \n'),
((grid(N,U,1), U \= a, print('U->'), write(U), print('\n'), print('X->'), write(a));
(grid(N,1,U), U \= b, print('U->'), write(U), print('\n'), print('Y->'), write(b));
(grid(N,U,4), U \= a, print('U->'), write(U), print('\n'), print('X->'), write(a));
grid(N,4,U), U \= b, print('U->'), write(U), print('\n'), print('Y->'), write(b)));
print('Rule 2 \n'),
((finddup(N,X-1,Y), X-1 >= 1, X-1 =< 4, Y >= 1, Y =< 4);
(finddup(N,X+1,Y), X+1 >= 1, X+1 =< 4, Y >= 1, Y =< 4);
(finddup(N,X,Y-1), X >= 1, X =< 4, Y-1 >= 1, Y-1 =< 4);
(finddup(N,X,Y+1), X >= 1, X =< 4, Y+1 >= 1, Y+1 =< 4)).
請幫助我o UT傢伙...我一直在嘗試這一點,因爲一兩個星期......
感謝,
維卡斯
我不明白。矩陣由第一列表示,對嗎?其他專欄的目的是什麼?你叫什麼重複?你對你的輸入例子有什麼期望? – Ravan
我的i/p是上面規定的網格。我的o/p應該是,如果我查詢finddup(1,1,1)。應該返回false ...類似finddup(2,1,3)。必須返回TRUE,因爲在同一行和列中出現另一個2(grid(2,1,2)和grid(2,3,3)。 –
也許你想重新表達一下你的問題。爲什麼你想要檢測重複?我懷疑你最終想要把矩陣作爲一個大的術語 – false