我有一个简单的DLV程序,由几个谓词和派生规则组成。其中一个规则没有被激活,我不知道为什么,因为显然所有的谓词都存在。我不得不承认,我不是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),知道(p3,p3),知道(,)
由于我有"value(v1)“和”明知( p1,v1)“和"connected(p1,p2)",所以我希望程序的输出应该包含”知道(p1,块(v1,p1,p2))“。
有人能解释一下为什么不发生这种事吗?
编辑:我删除了所有的规则,只创建了这个单一的规则。
chunk(v, ps) :- value(v), participant(ps).
但是这个规则也没有被激活!有什么问题吗?我试过最简单的一个:
chunk(v) :- value(v).
也没有激活。我遗漏了什么?
发布于 2018-08-25 08:42:53
好的。我刚刚意识到我的愚蠢。问题是我用小写字母作为变量,而不是用大写字母.对不起,就像我说的,我生锈了!
所以,只是为了记录下。而不是chunk(v) :- value(v)
,它应该是类似于chunk(V) :- value(V)
的东西
https://stackoverflow.com/questions/52019013
复制相似问题