Matrix 如何防止对空矩阵或具有空列或空行的矩阵进行操作?

Matrix 如何防止对空矩阵或具有空列或空行的矩阵进行操作?,matrix,prolog,Matrix,Prolog,在我要解决的问题中,定义良好的矩阵没有空行或空列 例如,矩阵[[],[]]无效 当我调用函数first_column时,如果我作为参数发送的矩阵不是以前定义的有效矩阵,我如何防止执行它 first_column([],[],[]). first_column([[H|T]|Tail],[H|Col],[T|Rows]):- first_column(Tail,Col,Rows). 从技术上讲,您所要求的可以通过测试一个元素列表的结束条件来完成,而不是根据您给出的规范测试一个空列表 first_

在我要解决的问题中,定义良好的矩阵没有空行或空列

例如,矩阵
[[],[]]
无效

当我调用函数first_column时,如果我作为参数发送的矩阵不是以前定义的有效矩阵,我如何防止执行它

first_column([],[],[]).
first_column([[H|T]|Tail],[H|Col],[T|Rows]):- first_column(Tail,Col,Rows).

从技术上讲,您所要求的可以通过测试一个元素列表的结束条件来完成,而不是根据您给出的规范测试一个空列表

first_column([[H|T]],[H],[T]).
first_column([[H|T]|Tail],[H|Col],[T|Rows]):- first_column(Tail,Col,Rows).
但是,除了您的规范之外,我怀疑您还需要“传输”最终列、行到结束变量,类似于:

first_column([[H|T]],C,R,[H|C],[T|R]).
first_column([[H|T]|Tail],[H|C],[T|R],Col,Rows):- 
    first_column(Tail,C,R,Col,Rows).
修改后的谓词将使用初始条件调用,如

first_column(List,[],[],Col,Rows).