prolog - Prolog:子列表列表
问题描述
我的任务是创建一个子列表列表,其中元素按连续顺序排序。我遇到了困难,因为当它遍历列表并返回带有列表的多个列表时,这不是我想要的。我的目标是一个包含多个长度为 3 的子列表的列表。
例子
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 = [_,_,_]
破坏了我的功能。
解决方案
您可以使用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).
推荐阅读
- expressionengine - ExpressionEngine 文件未删除
- reactjs - 有人在反应管理员中选择过滤器有问题吗?
- javascript - Font Awesome 5 中的 dom.i2svg() 不起作用
- java - 有没有办法将一个字符循环到一个数组中?
- hibernate - 休眠 FetchMode.JOIN 与 FetchMode.SUBSELECT
- python - 神经网络的缩放数据
- spring - 使用 Spring Boot、MongoDB 嵌套对象
- node.js - 使用nodejs重置密码
- java - 检索对 Java 的弹性搜索响应的延迟
- javascript - 如何使用 jquery 更改元素内的文本?