Prolog:检查它是否是矩阵并计算行和列

时间:2015-12-07 20:12:16

标签: list matrix prolog

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

我需要编写一个谓词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),
    !.

1 个答案:

答案 0 :(得分:3)

只需按照以下步骤操作:

length_of(N, Ls) :-
   length(Ls, N).

size(Mss, R, C) :-
   length(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.