1
我写了一个prolog程序,它可以在二维表中生成所有可能的元素位置。给出了元素的数量和表格大小。Prolog,删除重复的结果代
我的代码是:
geni(Min, Min, Max) :- Min =< Max.
geni(Min, X, Max) :- Max >= Min, MinInc is Min+1, geni(MinInc, X, Max).
generate(_, 0, []) :- !.
generate(TSize, N, [X|Tail]) :- NDec is N-1, generate(TSize,NDec, Tail),
X=k(X1,Y1), geni(1,X1,TSize), geni(1,Y1,TSize),
not(member(X, Tail)).
(有TSize
是表的大小,N
是元件的数量,且最后一个是结果) 谓词geni
在间隔[A;B]
生成数X
。
实施例(在2×2表2元素):
?- generate(2, 2, R).
R = [k(1, 1), k(1, 2)] ;
R = [k(1, 1), k(2, 1)] ;
R = [k(1, 1), k(2, 2)] ;
R = [k(1, 2), k(1, 1)] ;
R = [k(1, 2), k(2, 1)] ;
R = [k(1, 2), k(2, 2)] ;
R = [k(2, 1), k(1, 1)] ;
R = [k(2, 1), k(1, 2)] ;
R = [k(2, 1), k(2, 2)] ;
R = [k(2, 2), k(1, 1)] ;
R = [k(2, 2), k(1, 2)] ;
R = [k(2, 2), k(2, 1)] ;
false.
我的表是棋盘和元件是骑士。在这种情况下,所有元素都是平等的,但我的程序“认为”它们是不同的。 如何避免相同的结果?像这样:
R = [k(1, 1), k(1, 2)] ;
R = [k(1, 2), k(1, 1)] ;