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

如何在Prolog中编写atoms/2谓词实现混合列表的原子筛选

Prolog谓词atoms/2实现方案

要实现从混合元素列表中筛选所有原子的需求,可以直接基于Prolog内置的atom/1判断谓词递归实现,代码如下:

% 边界条件:空列表过滤后仍为空列表
atoms([], []).
% 情况1:当前列表头是原子,将其加入结果列表,递归处理剩余尾部
atoms([Head|Tail], [Head|ResultTail]) :-
    atom(Head),
    atoms(Tail, ResultTail).
% 情况2:当前列表头不是原子,跳过该元素,递归处理剩余尾部
atoms([Head|Tail], Result) :-
    \+ atom(Head),
    atoms(Tail, Result).

实现说明

  • atom/1是Prolog内置谓词,仅当参数为Prolog原子类型时返回真,变量、数字、复合项(比如示例中的father(max))都不会满足该判断条件。
  • 代码天然保留原列表中的原子顺序和重复元素,符合需求要求。

调用测试

按照给出的示例调用,返回结果完全符合预期:

?- atoms([Y, donkey, horse, 30, father(max)], Result).
Result = [donkey, horse].

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:48:03