在 Prolog 中创建单位矩阵

Creating an Identity Matrix in Prolog

我必须编写谓词 identity/2,它接收一个数字 n,并生成一个单位矩阵 [n x n]

示例:

identity(3,I).
I = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];

对于这个我都不知道怎么开始了。至少了解如何构建 n 元素的简单列表可以为我提供一个很好的起点!谢谢!

嗯,你需要做的第一件事就是担心你的基本情况,我会给你:

identity(1, [[1]]).

现在你需要让它以感应方式工作。

就我个人而言,我会编写一些辅助谓词,例如生成零列表:

zeroes(0, []).
zeroes(N, [0|Rest]) :- succ(N0, N), zeroes(N0, Rest).

您还可以使用 length/2:

生成任意大小的列表
?- length(X, 3).
X = [_G1563, _G1566, _G1569].

其他可能对您有帮助的谓词:nth1/3:

?- length(X, 3), nth1(1, X, foo), nth1(3, X, bar).
X = [foo, _G1658, bar].

别忘了,您可以使用 [X|Rest] 添加到列表的前面。 :) 祝你好运!