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

如何在Prolog中从矩阵(列表的列表)提取指定列

Prolog矩阵列提取功能实现

首先明确需求:实现从二维矩阵中提取指定索引列的功能,调用示例为extract_column([[1,2], [3, 4], [5,6]], 0, X),预期返回结果为X = [1,3,5]。

现有代码问题排查

你当前编写的代码存在几个明显错误:

  • 基准子句参数不匹配:子句头只有2个参数,和定义的3参数谓词不一致,且空矩阵的提取结果应为空列表,不需要额外变量
  • 递归调用时错误给尾列表套了一层[]:T本身就是剩余行组成的列表,直接传参即可不需要额外包装
  • nth0调用参数错误:给当前行H套了[]会把行变成嵌套列表,无法取到正确的元素,且Prolog中变量首字母要大写,小写的num1是常量无法绑定值
  • 拼接逻辑完全颠倒:不需要手动调用append,用Prolog列表的[Head|Tail]构造语法即可直接完成元素拼接

正确实现代码

% 基准规则:空矩阵提取任意索引的列结果都为空
extract_column([], _, []).

% 递归规则:拆分矩阵为当前行+剩余行,分别处理
extract_column([CurrRow|RestRows], Index, [CurrElem|RestColumn]) :-
    nth0(Index, CurrRow, CurrElem),
    extract_column(RestRows, Index, RestColumn).

调用验证

执行查询extract_column([[1,2], [3, 4], [5,6]], 0, X).,会直接返回匹配结果:
X = [1, 3, 5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:06