我有这个简单的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).
,并且没有激活。我想念什么?
答案 0 :(得分:1)
好。我刚意识到自己的愚蠢。问题是我在变量中使用小写字母而不是大写字母...对不起,我说我生锈了!
所以,仅作记录。而不是chunk(v) :- value(v)
应该是chunk(V) :- value(V)