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

Prolog中统计列表不同元素数量的实现求助

统计列表中不同元素数量的Prolog实现

你已经实现的tamanho谓词通过递归遍历累加的方式统计总元素数,要实现统计不同元素数量的功能,核心是在递归过程中记录已出现过的元素,仅对首次出现的元素计数。可以基于同样的递归思路,新增辅助谓词跟踪已见元素:

% 主谓词:调用辅助谓词,初始化已见元素列表为空
tamanho_distintos(Lista, Contagem) :-
    tamanho_distintos_aux(Lista, [], Contagem).

% 基准情况:空列表的不同元素数量为0
tamanho_distintos_aux([], _, 0).

% 递归情况1:当前元素已在已见列表中,跳过并继续处理尾部
tamanho_distintos_aux([H|T], Vistos, Contagem) :-
    member(H, Vistos),
    tamanho_distintos_aux(T, Vistos, Contagem).

% 递归情况2:当前元素未在已见列表中,计数加1,将元素加入已见列表后处理尾部
tamanho_distintos_aux([H|T], Vistos, Contagem) :-
    \+ member(H, Vistos),
    tamanho_distintos_aux(T, [H|Vistos], Contagem1),
    Contagem is Contagem1 + 1.

测试验证

调用查询:tamanho_distintos([1,2,2,3], X).,Prolog会返回X = 3,符合预期需求。

思路说明

  • 延续了你实现tamanho的递归逻辑:分基准情况(空列表)和递归情况处理列表尾部
  • 新增Vistos参数存储已处理过的元素,避免重复计数
  • 用member/2判断元素是否已存在,\+表示取反(元素未出现过)

内容的提问来源于stack exchange,提问作者André Sousa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:20