我想在SWI-Prolog中有一个N×N矩阵,其中每个元素的值分配在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_matrix(4,R)。
ERROR: Type error:
整数'预期,找到[_G2363,_G2366,_G2369,_G2372]'
答案 0 :(得分:2)
当然,域名分配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.
作为替代方案 - 不太可读的imo -
n_matrix(N, Rows) :-
bagof(Row, C^(between(1, N, C), length(Row, N), Row ins 1..9), Rows).