【问题标题】:Prolog - writing a rule for finding the top cellProlog - 编写查找顶部单元格的规则
【发布时间】:2013-05-01 06:22:28
【问题描述】:

我是 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

这个错误的原因是什么?

【问题讨论】:

    标签: prolog cellular-automata


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • Tnx,它可以工作,但我需要给两个单元格作为参数,但我仍然没有得到答案(错误原因)。
    【解决方案2】:

    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.
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-31
      • 2012-01-10
      • 1970-01-01
      相关资源
      最近更新 更多