prolog - 大小为 n 的列表的 Prolog 子组
问题描述
我正在尝试创建一个规则来确定一个列表是否是另一个列表的大小为 n 的子列表。
isSubgroup/3
isSubgroup(+Subgroup, +Group, +N)
例如,isSubgroup([1, 2, 4], [1, 2, 3, 4, 5], 3)
将返回True
但是,isSubgroup([4, 2, 1], [1, 2, 3, 4, 5], 3)
会返回False
(因为顺序不同)
我想检查子组的每个成员是否是大组的成员,但这会忽略顺序。
这个想法可行吗?
解决方案
正如@WillemVanOnsem 建议的那样,一个归纳解决方案:
subGroups([], []).
subGroups([X|Xs], [X|Ys]):-
subGroups(Xs, Ys).
subGroups(Xs, [_|Ys]):-
subGroups(Xs, Ys).
subGroupsN(Options, N, Solution) :-
length(Solution, N),
subGroups(Solution, Options).
推荐阅读
- python - pip install cgal-bindings - 缺少 gmp、mpfr、CGAL 库
- python - 在 ascii 地牢地图中添加相机以跟随“玩家”移动
- amazon-web-services - EFS 可以用作触发 Lambda 函数的事件源吗?
- swiftui - SwiftUI 将更改函数作为参数传递给自定义组件
- swagger-ui - 删除 L5-SwaggerUI 的“试用”按钮
- sharepoint - 如何因权限更改而获得 Graph API 增量更改?
- python - 从 json api 解析信息的问题
- r - 如何使列成为 Shiny 中滑块的 inputId?
- linux - 如何在创建时设置 pthread 名称?
- javascript - 如何检测何时为 vscode 扩展按下了特定的快捷方式