假设:
List = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
我想制作一个执行以下操作的方法:
插入(a,2,3,List)。
List = [[0, 0, 0],
[0, 0, 0],
[0, a, 0]]
我认为这将涉及按行然后列重复并递减相应的变量,直到它是一个作为基本情况,但之后应该做什么?如何将所有东西重新组合在一起?
答案 0 :(得分:0)
我知道这不是优雅的答案,但我试图帮助你
此谓词inserto/4
在一个列表中添加一个元素
<强>代码强>
inserto(_,[],[],_).
inserto(E,[_|Xs],[E|Ys],1) :- inserto(E,Xs,Ys,0),!.
inserto(E,[X|Xs],[X|Ys],N) :- N1 #= N-1, % N<=length(List)
inserto(E,Xs,Ys,N1).
示例:
| ?- inserto(a,[1,2,3],L,1).
L = [a,2,3] ? ;
no
%
并且这个谓词inserto/5
将列表L的元素复制到L1,直到N = M = 0,这意味着我们必须将L的所有元素复制到L1中,直到新元素必须被替换为古代
代码:
% test : inserto(E,L,L1,N,M).
% test : L=[[0,0,0],[0,0,0],[0,0,0]], inserto(e,L,L1,2,3).
inserto(_,[],[],_,_).
inserto(E,[[_|Xs]|Ys],[[E|Xs1]|Ys1],1,1) :-
!,inserto(E,[Xs|Ys],[Xs1|Ys1],0,0).
inserto(E,[[X]|Xs],[[X]|Xs1],0,0) :-
inserto(E,Xs,Xs1,0,0),!.
inserto(E,[[X|Xs]|Ys],[[X|Xs1]|Ys1],0,0) :-
inserto(E,[Xs|Ys],[Xs1|Ys1],0,0).
inserto(E,[[X|Xs]|Ys],[[X|Xs1]|Ys1],N,1) :-
N1 #= N-1,
inserto(E,[Xs|Ys],[Xs1|Ys1],N1,1).
inserto(E,[Xs|Ys],[Xs|Ys1],N,M) :-
M1 #= M-1,
inserto(E,Ys,Ys1,N,M1),!.
示例:
| ?- L=[[0,0],[0,0,0],[0,0,0,0]], inserto(e,L,L1,3,2).
L = [[0,0],[0,0,0],[0,0,0,0]],
L1 = [[0,0],[0,0,e],[0,0,0,0]] ? ;
no
根据您的问题,我添加了这个谓词insert2D/4
代码:
% test : insert2D('E',2,3,[[1,2],['R'],[a,b,c]]).
insert2D(Elem,NC,NL,List) :-
inserto(Elem,List,NvList,NC,NL),
write(NvList).
示例:
| ?- insert2D('E',2,3,[[1,2],['R'],[a,b,c]]).
[[1,2],[R],[a,E,c]]
yes