是否从prolog中的列表列表中删除元素(x,y)?

是否从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,

我需要一个谓词,它给出一个列表列表(矩阵)

删除(行、列)元素

例如,给出列表(L):

我已经有停止谓词了

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]]