solve([],[]).
solve([H|T] ,L2) :-
solve(T,L2).
solve(L1,[H,H|T1]) :-
solve(L1,T1).
期望值
solve([a,b,a,b,a,b,a,b], X).
X = [] ? ;
X = [a,b,a,b,a,b,a,b] ? ;
X = [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b] ? ;
X = [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b] ? ;
X = [a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b] ? ;
这一直持续到无限
实际输出
X = [] ? ;
X = [A,A] ? ;
X = [A,A,B,B] ? ;
X = [A,A,B,B,C,C] ? ;
X = [A,A,B,B,C,C,D,D] ? ;
X = [A,A,B,B,C,C,D,D,E,E] ? ;
X = [A,A,B,B,C,C,D,D,E,E,F,F] ?
我不确定为什么会发生这种情况,因为我无法将其乘以初始的第一个参数长度(从0开始并在2s内递增)是否对输出第一个论证0次或更多次有帮助?
答案 0 :(得分:1)
我们将使用append/3
:https://www.swi-prolog.org/pldoc/man?predicate=append/3
solve(L1, []).
solve(L1, L2) :- solve(L1, L3), append(L1, L3, L2).
空列表是第一个参数的0个副本。
如果L3
是n
的{{1}}副本,并且L1
是L2
与L1
串联的,则L3
是L2
的{{1}}个副本。
修改
为了使在第一个参数中搜索解决方案成为可能,我们进行了两项更改:
n+1
要求。 代码现在如下:
L1