在Prolog中创建标识矩阵

时间:2015-12-10 17:38:06

标签: matrix prolog identity

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

示例:

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

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

1 个答案:

答案 0 :(得分:3)

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

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]即可添加到列表中。祝你好运!