示例
list([]).
list([_|T]) :- list(T).
sublist(L, []) :- list(L).
sublist([HX|TX],[HX|TY]) :- sublist(TX,TY).
sublist([_|TY], X) :- X = [_|_], sublist(TY, X).
这将打印出每个子列表。
?- sublist([10,20,30,a,b], L).
L = [] ;
L = [10] ;
L = [10, 20] ;
L = [10, 20, 30] ;
L = [10, 20, 30, a] ;
L = [10, 20, 30, a, b] ;
L = [10, 20, 30, b] ;
..and so on
我想要的是这样的东西
?- sublist([10,20,30,a,b], L).
L = [[10,20,30],[20,30,a],[30,a,b]]
我一直想得太多,而其他X = [_,_,_]
破坏了我的功能。
答案 0 :(得分:2)
您可以使用append/3
获取所有“滑动”子列表。
对于3个元素的特定情况:
sublist(L, LSubL):-
findall([A,B,C], append(_, [A,B,C|_], L), LSubL).
对于“大小”项目的滑动窗口更一般的情况:
sliding_window(L, Size, LSubL):-
length(SubL, Size),
append(SubL, _, SubLO),
findall(SubL, append(_, SubLO, L), LSubL).