Matrix Prolog-返回矩阵的第n列

Matrix Prolog-返回矩阵的第n列,matrix,prolog,logic,Matrix,Prolog,Logic,我试图编写谓词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]):-

我试图编写谓词
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
谓词来做这件事)


我的代码怎么会错?提前感谢您。

感谢@Lougler的上述评论,此代码有效:

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).

columnN
的基本情况是
columnN([]、[]、[])
。第二个参数是一个空列表。但您的谓词被定义为第二个参数有一个整数(列号)。所以这个基本案例总是会失败。哇,就是这样!!!!!非常感谢。我把它改为:
columnN([],[uu,[])。
取而代之,它可以工作。@潜伏者地图列表也是个好主意吗
columnN(X,Y,Z):-maplist(rowN,X,Y,Z)。
@krishnakalyan这是一个简短的解决方案,但它不能回答OP的问题,OP也没有定义
list\u head\u tail
谓词。@krishnakalyan是的,这类问题对于
maplist
来说非常理想。)如果您愿意,您也可以接受您自己的答案。:)