首页 > 解决方案 > 大小为 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(因为顺序不同)

我想检查子组的每个成员是否是大组的成员,但这会忽略顺序。

这个想法可行吗?

标签: prolog

解决方案


正如@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).

推荐阅读