我需要一个给出列表列表(矩阵)的谓词
removeElementM(Line,Column,List,NewList)
删除(Line,Column)元素。
例如给定List(L):
([a,b,c,d],
[e,r,t,y],
[u,i,o,t])
removeElementM(2,2,L,X) would return
X = [[a,b,c,d],[e,r,t,y],[u,i,t]]
我已经有了停止谓词
removeElementM(0,0,[[_|T1]|T],[T1|T]).
但是无法为另一个提出解决方案...
答案 0 :(得分:2)
类似的东西:
removeElementM(Line,Column,[List | Rest],[List |NewList]) :-
Line > 0,
Line1 is Line - 1,
removeElementM(Line1, Column, Rest, NewList).
removeElementM(0, Column,[List | Rest],[List1 |Rest]) :-
removeElementL(Column, List, List1).
removeElementL(Column, [H | T], [H | T1]) :-
Column > 0,
Column1 is Column - 1,
removeElementL(Column1, T, T1).
removeElementL(0, [_H | T], T).
答案 1 :(得分:1)
nth0 / 4相当强大。您需要将一行替换为已删除元素的另一行。然后
removeElementM(R, C, Mat, Upd) :-
nth0(R, Mat, OldRow, RestRows), % get the row and the rest
nth0(C, OldRow, _Val, NewRow), % we don't care the _Val deleted
nth0(R, Upd, NewRow, RestRows). % insert updated row in rest, get Upd matrix
test :-
L = [[a,b,c,d],
[e,r,t,y],
[u,i,o,t]],
removeElementM(2,2,L,X),
writeln(X).
?- test.
[[a,b,c,d],[e,r,t,y],[u,i,t]]
如果你正在学习Prolog,你最好从@ joel76验证答案,这是没有SWI-Prolog特定功能的基本Prolog。