在 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]
添加到列表的前面。 :) 祝你好运!
我必须编写谓词 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]
添加到列表的前面。 :) 祝你好运!