这是我的问题:
编写一个程序
distance(List, Nemptylist, SubList)/3
,检查是否Sublist
是一个子列表,List
其距离不超过N
项之间的约束(N
实现为Nemptylist
-N
匿名变量列表)。假设它List
是完全实例化的。允许重复答案,只要它们的数量是有限的。例如,对于
N
= 2 :?- distance( [a,t,d,r,a,n,c,b,c] , [_,_], [a,b,c] ). true ?- distance( [m,a,t,d,r,b,c,t] , [_,_] , [a,b,c] ). false ?- distance([a, t, d, r, a, n, c, b], [_, _], [a, b, c]). false ?- distance([c, c, c, a, c, c, c], [_, _], [a]). true.
我已经坐了几个小时,试图解决这个问题,最终上面的例子奏效了,但后来我运行了一些测试,但它们失败了。
我现在的解决方案如下:
distance( L1 , L2 , [X] ) :-
member(X,L1) .
distance( L1 , L2 , [H|T] ) :-
distance(L1,L2,T) ,
append(Y,Z,L2) ,
T=[Hs|Ts] ,
append([H],Y,W) ,
append(W,[Hs],R) ,
sublist(R,L1) .
prefix(X,L) :- append(X, _, L).
suffix(X,L) :- append(_, X, L).
sublist(X,L) :- suffix(S,L) , prefix(X,S) .
当我尝试运行此测试时:
distance( [r,a,n,c,b,c],[],X) .
由于超出运行时间错误而失败。
我调试了几个小时,我真的筋疲力尽了。请帮我完成这个可怕的任务。