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

Prolog实现repeated(L,D)谓词:不使用内置列表谓词提取重复元素

实现思路

完全不使用任何Prolog内置列表谓词,仅通过自定义3个辅助谓词完成需求:

  1. member_manual(X, L):自定义成员判断逻辑,判断元素X是否存在于列表L中
  2. occurs_twice(X, L):判断元素X是否在列表L中至少出现2次
  3. repeated_aux/4:带累加器的辅助遍历谓词,负责遍历原列表、去重、收集符合要求的重复元素

完整实现代码

% 自定义成员判断
member_manual(X, [X|_]).
member_manual(X, [_|T]) :- member_manual(X, T).

% 判断元素至少出现2次
occurs_twice(X, [X|T]) :- member_manual(X, T).
occurs_twice(X, [_|T]) :- occurs_twice(X, T).

% 辅助遍历谓词:参数依次为<当前遍历的列表片段> <完整原列表> <已收集的重复元素集合> <最终结果>
repeated_aux([], _, _, []).
repeated_aux([H|T], Original, Acc, [H|ResT]) :-
    occurs_twice(H, Original),
    \+ member_manual(H, Acc),
    repeated_aux(T, Original, [H|Acc], ResT).
repeated_aux([H|T], Original, Acc, Res) :-
    (\+ occurs_twice(H, Original) ; member_manual(H, Acc)),
    repeated_aux(T, Original, Acc, Res).

% 主调用谓词
repeated(L, D) :- repeated_aux(L, L, [], D).

效果验证

运行示例查询:
?- repeated([a,b,a,d,a,d], D).
返回结果和要求完全一致:
D = [a,d].

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:24:04