【发布时间】:2013-11-23 16:15:54
【问题描述】:
我是 Prolog 的新手,遇到以下问题:
我表示一个二维数组如下:
[[ROW1], [ROW2],..]
我写了一个谓词打印出二维数组如下:
valueAt(1, [BEGIN | _], BEGIN).
valueAt(POSITION, [FIRST | REST], VAL) :- NPOS is POSITION - 1,
valueAt(NPOS, REST, VAL).
printRowValues([], _).
printRowValues(ROW, STARTIDX) :- valueAt(STARTIDX, ROW, VALUE),
print(VALUE), print(' '),
NEXTIDX is STARTIDX + 1,
printRowValues(ROW, NEXTIDX).
printContainer(CONTAINER) :- printRows(CONTAINER, 1).
printRows([]).
printRows([ROW | REST]) :- printRowValues(ROW, 1),
printRows(REST).
这会打印第一行,然后给出 false。我真的没有在这里看到我的问题..
PS:函数 printRowValues 使用索引是因为我用它来测试我的 valueAt 函数。我知道我可以更简单地编写 printrow 函数(见下文),但这不是重点。我在这里缺少一些 Prolog 知识。
更简单的版本,使整个事情工作:
printRow([]).
printRow([HEAD | REST]) :- print(HEAD), print(' '),
printRow(REST).
示例查询:
[debug] [1] 41 ?- printRows([[1, 1, 1], [2, 2, 2], [3, 3, 3]]).
1 1 1
false
【问题讨论】:
标签: prolog