【发布时间】:2015-12-09 23:10:57
【问题描述】:
我正在尝试编写谓词columnN/3,它返回矩阵的“第n 个”元素。
例子:
columnN([[1,2],[3,4],[5,6]], 1, CJ).
CJ = [1,3,5];
No
在社区的帮助下,我能够尝试使用谓词rowN/3 来尝试获取列。
这是我目前所拥有的:
rowN([H|_],1,H):-!.
rowN([_|T],I,X) :-
I1 is I-1,
rowN(T,I1,X).
columnN([],[],[]).
columnN([H|T], I, [R|X]):-
rowN(H, I, R),
columnN(T,I,X).
我只是误会了。
rowN/3 谓词工作得很好,rowI([1,2,3,4], 2, RI). 将返回 2,所以我想使用它,我可以输入每一行,获取值并将其附加到列表中。 (我试图用 columnN 谓词来做)。
我的代码怎么错了?提前谢谢你。
【问题讨论】:
-
columnN的基本情况是columnN([], [], [])。您的第二个参数是一个空列表。但是您的谓词被定义为第二个参数有一个整数(列号)。所以这个基本情况总是会失败。 -
哇,原来如此!!!!谢谢!!!我将其改为:
columnN([],_,[]).,它可以工作。 -
@lurker maplist 也是个好主意吗?
columnN(X,Y,Z):- maplist(rowN, X, Y, Z). -
@krishnakalyan 这是简短的解决方案,但这不能回答 OP 的问题,OP 也没有定义
list_head_tail谓词。 -
@KrishnaKalyan 是的,这种问题对于
maplist来说是理想的。 :)