【问题标题】:Prolog - Return the n-th column of a matrixProlog - 返回矩阵的第 n 列
【发布时间】: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 来说是理想的。 :)

标签: matrix prolog logic


【解决方案1】:

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

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

【讨论】:

  • 如果您愿意,您也可以在 SO 中接受您自己的答案。 :)
猜你喜欢
  • 2016-03-14
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多