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

Prolog如何递归生成两个列表所有元素组合构成的二维数组

Prolog 两个列表笛卡尔积实现方案

问题根因

原代码递归时将 L1 单个元素生成的组合子列表作为单独元素插入结果列表,导致输出为嵌套结构,将子列表元素追加到结果中即可解决。

完整可运行代码

% 生成单个元素与L2的所有配对组合
combo([], _, Acc, Acc) :- !.
combo([H2|T2], H_tmp, Acc, M) :- 
    combo(T2, H_tmp, Acc, M_tmp),
    M = [[H_tmp,H2]|M_tmp].

% 自定义列表拼接(替代内置append)
append_lst([], L2, L2).
append_lst([H|T], L2, [H|Res]) :-
    append_lst(T, L2, Res).

% 递归处理L1所有元素,拼接所有组合结果
matrix([], _, []).
matrix([H1|T1], L2, Res) :-
    combo(L2, H1, [], CurrentCombos),
    matrix(T1, L2, RestRes),
    append_lst(CurrentCombos, RestRes, Res).

% 主调用谓词,符合要求的调用格式
list(L1, L2, L) :-
    matrix(L1, L2, L).

测试调用

执行查询:
list([1,2,3],[1,2,3],L).
返回结果:
L = [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:07