在Prolog中将值分配给矩阵(列表列表)

时间:2014-04-09 01:23:33

标签: list prolog

我想在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]'

1 个答案:

答案 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).