我正在尝试在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, _]].
任何人都知道为什么会这样?
答案 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。