我现在正在开始一种新语言(PROLOG),我遇到了一些问题。
我正在开发一个简单的棋盘游戏,我需要打印棋盘。我已经开发了 PrintBoard 和 initialBoard 谓词(如下所示),我希望能够从 main 谓词运行它,就像这样:
printBoard([Head|Tail]) :-
printRow(Head),
printBoard(Tail).
printBoard([]).
printRow([Head|Tail]) :-
write(Head),
write(' '),
printRow(Tail).
printRow([]) :- nl.
initialBoard(Board) :- Board = ([
['b0','b0','b0','b0','b1'],
['b0','b0','b0','b0','b0'],
['b0','b0','b0','b0','b0'],
['b0','b0','b0','b0','b0'],
['b2','b0','b0','b0','b0']
]).
main :- Board = initialBoard(Board), printBoard(Board).
在 SICStus PROLOG 中输入main.
,程序应输出以下内容:
b0 b0 b0 b0 b1
b0 b0 b0 b0 b0
b0 b0 b0 b0 b0
b0 b0 b0 b0 b0
b2 b0 b0 b0 b0
但是,相反,它返回没有。 (返回no
)。
它似乎唯一可行的方法是将整个列表作为变量重新插入,就像这样:
main :- printBoard(<insert whole list here>).
即使我想将其作为:
运行main :- printBoard(initialBoard(Board)).
如果main传递了 Board 参数,则上面的代码部分可以工作,但是可以不传递它吗?
功能代码:
main(Board) :- printBoard(initialBoard(Board)).