【问题标题】:Prolog: Check if it is a matrix and count rows and columnsProlog:检查它是否是矩阵并计算行和列
【发布时间】:2015-12-07 20:12:15
【问题描述】:

考虑到矩阵是行列表,如何检查我的矩阵是否真的是矩阵。

我需要写一个谓词size(M, Row, Col)。 如果不是矩阵,它应该失败。 如果是矩阵,应该计算行数和列数。

带有预期答案的示例查询:

?- size([[1,2],[3,4],[5,6]], Rows, Cols).    
Rows = 3, Cols = 2.

?- size([[1,2],[3,4,5]], Rows, Cols).  
no

我已经编写了下一个代码,其中我只是简单地获取了行数和列数,但我不知道如何比较每一行。如果行的长度不同,那么它应该返回“no”并且不打印行数和列数。

代码:

size([], 0, 0).
size(M, R, C) :-
    length(L, R).
size([H|T], R, N) :-
    length(H, N),
    !.

【问题讨论】:

  • 是的,所以我想我这样做的原因size(M, R, C) :- length(L, R). 因为我需要获取行的长度(因为每个列表都是一行)。正如你所说,我尝试实现same length,但我不知道如何比较每个内部列表并在它们不同时退出。

标签: list matrix prolog


【解决方案1】:

只需像这样进行:

length_of(N, Ls) :- length(Ls, N)。 尺寸(Mss,R,C):- 长度(Mss,R), maplist(length_of(C), Mss)。

示例查询:

?- size([[1,2],[3,4],[5,6]], Rows, Cols).
Rows = 3, Cols = 2.

?- size([[1,2],[3,4,5]], Rows, Cols).
false.

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2019-03-09
    • 1970-01-01
    • 2013-05-17
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多