Matrix 如何在prolog中以以下格式打印矩阵
我正在尝试以以下格式打印矩阵,但我不确定如何打印。这就是我要打印的格式Matrix 如何在prolog中以以下格式打印矩阵,matrix,prolog,meta-predicate,Matrix,Prolog,Meta Predicate,我正在尝试以以下格式打印矩阵,但我不确定如何打印。这就是我要打印的格式 ************ ***35****35* ***2938**28* **28*2358*32 *3512**23*93 *28*3258*328 **92*329*21* *318*5913*13 *53*28**2345 *84*8125*21* **13**5329** **12****58** 这就是我创建矩阵的方式,我需要修改什么才能像上面那样打印出来 :- use_module(library(clpf
************
***35****35*
***2938**28*
**28*2358*32
*3512**23*93
*28*3258*328
**92*329*21*
*318*5913*13
*53*28**2345
*84*8125*21*
**13**5329**
**12****58**
这就是我创建矩阵的方式,我需要修改什么才能像上面那样打印出来
:- use_module(library(clpfd)).
%Create Matrix
setMatrix(N, Matrix) :-
length(Matrix, N),
maplist(length_list(N), Matrix).
length_list(L, Ls) :- length(Ls, L).
在回答实际问题之前,我要补充几点:
n_matrix(N, Matrix) :-
length(Matrix, N),
maplist(same_length(Matrix), Matrix).
n_矩阵/2
可用于所有方向,包括:使用部分填充矩阵,从给定或部分实例化矩阵确定n
,测试矩阵是否为n×n矩阵等。因此,我们选择了一个同时包含所有此类用例的名称,通过使用声明性措辞说明每个参数代表什么print_row(Ls) :- maplist(write, Ls), nl.
现在,您可以轻松地将其应用于打印整个矩阵:
?- n_matrix(N, Ms), maplist(print_row, Ms).
?-n_矩阵(n,Ms),地图列表(打印行,Ms)。
在描述列表上的关系时,通常最好先定义单个元素的关系,然后使用s
maplist/2
或maplist/N
来描述整个列表的关系。谢谢您的解释,非常清楚。我对prolog非常陌生,主要是做Java,所以prolog的做事方式现在对我来说非常奇怪。这是意料之中的。与Prolog相比,Java是非常低级的,因此,不再被低级细节拖累,您现在可能第一次可以自由思考更有趣的事情,这也更难理解:您定义的关系的通用性和全方位性,为一般关系等寻找好的名称。对不起,我如何将其应用于声明的n_矩阵?我的意思是我该如何添加它。因为这是在一个单独的文件中,我调用它到SWI prolog中。最简单的方法是将n_matrix/2
的定义添加到同一文件中的其他定义中。