1

我正在尝试在 ECLiPSE CLP 中获取数独板的尺寸,但是出现以下错误:

type error in dim([[_389, 9, 8, _395, _397, _399, _401, _403, _405], [_409, _411, _413, _415, 7, _419, _421, _423, _425], [_429, _431, _433, _435, 1, 5, _441, _443, _445], [1, _451, _453, _455, _457, _459, _461, _463, _465], [_469, _471, _473, 2, _477, _479, _481, _483, 9], [_489, _491, _493, 9, _497, 6, _501, 8, 2], [_509, _511, _513, _515, _517, _519, _521, 3, _525], [5, _531, 1, _535, _537, _539, _541, _543, _545], [_549, _551, _553, 4, _557, _559, _561, 2, _565]], [_567, _569])

我打电话时得到这个dim(Board,[R,C]),其中 Board 是数独板:

Board = [
[_, 9, 8, _, _, _, _, _, _],
[_, _, _, _, 7, _, _, _, _],
[_, _, _, _, 1, 5, _, _, _],
[1, _, _, _, _, _, _, _, _],
[_, _, _, 2, _, _, _, _, 9],
[_, _, _, 9, _, 6, _, 8, 2],
[_, _, _, _, _, _, _, 3, _],
[5, _, 1, _, _, _, _, _, _],
[_, _, _, 4, _, _, _, 2, _]].

有人知道为什么会这样吗?

4

1 回答 1

0

您正在调用dim/2,它需要一个数组作为第一个参数。但是,在您的情况下,Board 是一个列表。通过调用可以得到一个简单的转换:

array_list(BoardArray,Board)

小提示:由于数独将始终具有相同数量的行和列,因此您也可以使用相同的变量来说明维度。像这样:

dim(Sudoku,[N,N])

编辑:

为了也转换内部列表,您希望遍历列表列表并将每个行列表转换为数组。这如下所示:

(foreach(Row,Board), foreach(RowArray,Out)
do
  array_list(RowArray,Row)
),
array_list(BoardArray,Out)

我们同时迭代 Board 和 Out,以便将每个行列表转换为行数组,并且在循环之后,我们还将父板列表转换为板数组。

这似乎已经在这里得到了回答。

于 2016-03-17T17:46:09.250 回答