我必须编写一个谓词identity/2
,它接收一个数字n
,并生成一个单位矩阵[n x n]
。
示例:
identity(3,I).
I = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
对于这个,我甚至不知道如何开始。至少有关如何构建简单的n
元素列表的见解可以为我提供一个很好的起点!谢谢!
答案 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]
即可添加到列表中。祝你好运!