List 在Prolog中为矩阵(列表列表)赋值
我想在SWI Prolog中有一个nxn矩阵,每个元素的值都分配在1..9范围内。这是我的密码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
:- 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).
谢谢,我现在明白了。但是我们怎么能绕过分配的问题呢?是的。我的答案是正确的,只是对行/列的命名不太在意。