You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prolog中计算足球俱乐部的集合补集

正确的Prolog实现代码

首先,我们需要分三步实现需求:获取所有俱乐部的去重成员集合、提取足球俱乐部成员、计算补集。以下是完整代码:

% 已定义的俱乐部事实
club(football,   [john, mary, peter, jane]).
club(basketball, [peter, jane, tom, kim]).
club(dance,      [emily, andrew, john, jacob]).

% 获取所有俱乐部的去重成员集合
all_club_members(Members) :-
    findall(M, (club(_, MemberList), member(M, MemberList)), AllMembers),
    sort(AllMembers, Members). % sort自动去重并排序

% 获取足球俱乐部成员
football_members(Members) :-
    club(football, Members).

% 计算足球俱乐部成员在总集合中的补集
football_complement(Complement) :-
    all_club_members(TotalMembers),
    football_members(FootballMembers),
    subtract(TotalMembers, FootballMembers, Complement).

使用说明

在Prolog解释器中查询 football_complement(Result).,会得到结果(顺序可能因实现略有不同,但元素一致):

Result = [andrew, emily, jacob, kim, tom]

代码说明

  • findall/3 遍历所有俱乐部,收集所有成员到一个列表。
  • sort/2 对列表排序并自动去除重复元素,得到真正的集合。
  • subtract/3 计算两个列表的差集,即总集合中不在足球俱乐部列表里的元素,也就是我们需要的补集。

内容的提问来源于stack exchange,提问作者Raven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:30:49