Prolog实现生成全0填充N行M列二维矩阵的方法
Prolog实现全0填充二维矩阵生成谓词
需求说明
需要定义谓词matrix(N, M, MX),满足以下要求:
- N为矩阵行数,M为矩阵列数,MX为生成的N行M列的全0填充二维列表
- 执行查询
?- matrix(2, 3, Mx)时,返回唯一结果Mx = [[0,0,0],[0,0,0]],无其他可选匹配结果
实现代码
首先定义生成单行全0列表的辅助谓词,再通过映射生成完整矩阵,末尾添加裁剪确保无多余解:
% 辅助谓词:生成长度为M的全0列表 zero_row(M, Row) :- length(Row, M), maplist(=(0), Row). % 主谓词:生成N行M列的全0矩阵 matrix(N, M, MX) :- length(MX, N), maplist(zero_row(M), MX), !.
如果你的Prolog实现支持lambda语法,也可以不用单独定义辅助谓词,简化写法如下:
matrix(N, M, MX) :- length(MX, N), maplist(\Row^(length(Row, M), maplist(=(0), Row)), MX), !.
调用验证
执行查询后的输出和要求完全匹配:
?- matrix(2, 3, Mx). Mx = [[0,0,0],[0,0,0]] ? ; no
内容的提问来源于stack exchange,提问作者Bence Makula
相关产品推荐
相关产品推荐

