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

Prolog中如何实现嵌套列表的扁平化操作

Prolog列表扁平化实现方法

方法1:直接使用内置谓词flatten/2

绝大多数主流Prolog实现(比如SWI-Prolog、GNU Prolog)都自带了flatten/2内置谓词,第一个参数为待处理的嵌套列表,第二个参数为输出的无嵌套结果。
针对你给出的示例,直接调用即可得到结果:

?- A = [["a","b"],["c"]], flatten(A, B).
B = ["a", "b", "c"].

方法2:手动实现自定义扁平化谓词

如果需要自己实现核心逻辑,可通过递归处理列表元素完成,核心逻辑如下:

  • 边界条件:空列表扁平化后仍然是空列表
  • 如果当前列表头部是嵌套列表:先扁平化头部,再扁平化剩余尾部,最后拼接两部分结果
  • 如果当前列表头部不是列表:直接将头部作为结果的第一个元素,拼接剩余尾部扁平化的结果

实现代码:

% 自定义扁平化谓词my_flatten/2
my_flatten([], []).
% 头部为列表的分支
my_flatten([Head|Tail], Result) :-
    is_list(Head),
    my_flatten(Head, FlatHead),
    my_flatten(Tail, FlatTail),
    append(FlatHead, FlatTail, Result).
% 头部非列表的分支
my_flatten([Head|Tail], [Head|FlatTail]) :-
    \+ is_list(Head),
    my_flatten(Tail, FlatTail).

调用示例:

?- A = [["a","b"],["c"]], my_flatten(A, B).
B = ["a", "b", "c"].

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:08