序-编写查找顶部单元格的规则



我是Prolog的新手,我想写一个可以在细胞空间上进行一些计算的程序。首先,我用一些事实定义了元胞空间:

board_size(3).
cell(0,0,0).
cell(0,1,0).
cell(0,2,0).
cell(1,0,0).
cell(1,1,0).
cell(1,2,0).
cell(2,0,0).
cell(2,1,0).
cell(2,2,0).

cell(X,Y,Z)表示位置为(X,Y)的单元格,值为Z。对于寻找另一个单元格的顶部单元格,我写了这个规则:

top(cell(X1,Y1,_),cell(X2,Y1,_)) :- board_size(Size), X1 is (X2-1) mod Size.

最后,我通过一些查询测试了我的代码:

1 ?- top(cell(0,0,0),cell(1,0,0)).
true.
2 ?- top(cell(0,0,0),cell(X,0,0)).
ERROR: is/2: Arguments are not sufficiently instantiated

这个错误的原因是什么?

试试这个:

top(X1,Y1,X2,Y1) :- cell(X1,Y1,_), cell(X2,Y1,_), board_size(Size), X1 is (X2-1) mod Size.

X2没有在第二个查询中实例化。

faisal答案对我来说似乎是合适的(+1),因为从你的答案中没有明显看出top/2的目的是什么。按照他的建议,你应该参考你的实际细胞数据库。

那么你可以试试

top(cell(X1,Y1,_),cell(X2,Y1,_)) :-
   cell(X1,Y1,_),cell(X2,Y1,_), board_size(Size), X1 is (X2-1) mod Size.

相关内容

  • 没有找到相关文章

最新更新