如何在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
相关产品推荐
相关产品推荐

