是否从prolog中的列表列表中删除元素(x,y)?
我需要一个谓词,它给出一个列表列表(矩阵) 删除(行、列)元素 例如,给出列表(L): 我已经有停止谓词了是否从prolog中的列表列表中删除元素(x,y)?,prolog,Prolog,我需要一个谓词,它给出一个列表列表(矩阵) 删除(行、列)元素 例如,给出列表(L): 我已经有停止谓词了 removeElementM(0,0,[[_|T1]|T],[T1|T]). 但是不能为另一个提出解决方案…类似的东西: removeElementM(Line,Column,[List | Rest],[List |NewList]) :- Line > 0, Line1 is Line - 1, removeElementM(Line1, Column,
removeElementM(0,0,[[_|T1]|T],[T1|T]).
但是不能为另一个提出解决方案…类似的东西:
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).
/4在SWI Prolog中实现的功能相当强大。您需要将一行替换为已删除元素的另一行。然后
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。非常有用,谢谢!我刚开始学习prolog,所以这是我需要的答案类型,谢谢。这很有用谢谢,我会保留这个解决方案,即使你说我刚开始学习prolog,所以joel76的答案最适合我理解。再次感谢
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).
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]]