List 在Prolog中为矩阵(列表列表)赋值

List 在Prolog中为矩阵(列表列表)赋值,list,prolog,List,Prolog,我想在SWI Prolog中有一个nxn矩阵,每个元素的值都分配在1..9范围内。这是我的密码 :- use_module(library(clpfd)). n_matrix(N, Rows) :- length(Rows, N), Rows ins 1..9, maplist(length_(N), Rows). length_(L, Ls) :- length(Ls, L). 它给出了以下错误: 1?-n_矩阵(4,R) ERROR:Type ERROR:integer

我想在SWI Prolog中有一个nxn矩阵,每个元素的值都分配在1..9范围内。这是我的密码

:- use_module(library(clpfd)).
n_matrix(N, Rows) :-
   length(Rows, N),
   Rows ins 1..9,
   maplist(length_(N), Rows).

length_(L, Ls) :- length(Ls, L).
它给出了以下错误:

1?-n_矩阵(4,R)


ERROR:Type ERROR:
integer'expected,found
[\u G2363,\u G2366,\u G2369,\u G2372]
当然,域分配
Xs ins 1..9,
应该应用于行中的每一行,而您应用于“矩阵”。。。我会写

n_matrix(N, Rows) :-
   length(Rows, N),
   maplist(row(N), Rows).

row(N, Row) :-
   length(Row, N),
   Row ins 1..9.
作为一种替代方案-不太可读-

n_matrix(N, Rows) :-
   bagof(Row, C^(between(1, N, C), length(Row, N), Row ins 1..9), Rows).

谢谢,我现在明白了。但是我们怎么能绕过分配的问题呢?是的。我的答案是正确的,只是对行/列的命名不太在意。