0

我有这个简单的 DLV 程序,由几个谓词和派生规则组成。其中一个规则没有被激活,我不知道为什么,因为显然所有谓词都存在。我不得不承认我不是 DLV 方面的专家,而且自从我上次使用它以来有点生疏,所以如果这太明显了,请原谅我:-/

除其他外,我有这个规则:

knows(ps, chunk(v, ps, pd)) :-  value(v),       
                                knows(ps, v),
                                connected(ps, pd).

在这里你可以看到执行代码后我得到了什么:

./dlv -nofinitecheck model.edb rules.idb

{参与者(p1),参与者(p2),参与者(p3),价值(v1),价值(r1),价值(v2),价值(r2),价值(v3),价值(r3),连接(p1, p2), 连接(p1,p3), 连接(p2,p3), 知道(p1,v1), 知道(p1,r1), 知道(p2,v2), 知道(p2,r2), 知道(p3,v3 ), 知道(p3,r3)}

由于我有“value(v1)”和“knows(p1,v1)”和“connected(p1,p2)”,我期望程序的输出应该包含“knows(p1, chunk(v1, p1, p2) ))”。

谁能解释我为什么这没有发生?


编辑:我已经删除了所有规则并只创建了这一个

chunk(v, ps) :- value(v), participant(ps).

但是这个规则也没有被激活!有什么问题?我试过最简单的一个:

chunk(v) :- value(v).

并且没有激活。我错过了什么?

4

1 回答 1

1

好的。我才意识到我的愚蠢。问题是我使用小写字母而不是大写字母来表示变量......对不起,正如我所说我生疏了!

所以,只是为了记录。而不是chunk(v) :- value(v)应该像chunk(V) :- value(V)

于 2018-08-25T16:42:53.290 回答