ECLiPSe CLP类型错误在昏暗中?

时间:2016-03-17 17:23:01

标签: eclipse-clp

我正在尝试在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, _]].

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

您正在调用dim/2,它希望数组作为第一个参数。然而,在您的情况下,董事会是一个列表。通过调用:

可以获得简单的转换
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同时迭代,以便将每个行列表转换为行数组,在循环之后,我们还将父板列表转换为板阵列。

这似乎已经回答here