Предикат 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), знает(p1,r1), знает(p2,v2), знает(p2,r2), знает(p3,v3 ), знает(p3,r3)}

Поскольку у меня есть «значение (v1)» и «знает (p1, v1)» и «подключено (p1, p2)», я ожидал, что вывод программы должен содержать «знает (p1, чанк (v1, p1, p2) ))".

Может ли кто-нибудь объяснить мне, почему этого не происходит?


Изменить: я удалил все правила и создал только это единственное

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

Но и это правило не срабатывает! В чем проблема? Я пробовал самый простой:

chunk(v) :- value(v).

и никакой активации. Что мне не хватает?


person rutex    schedule 25.08.2018    source источник


Ответы (1)


ХОРОШО. Я только что осознал свою глупость. Проблема в том, что я использую строчные буквы для переменных, а не заглавные буквы... Извините, как я уже сказал, я ржавый!

Итак, просто для протокола. Вместо chunk(v) :- value(v) должно быть что-то вроде chunk(V) :- value(V)

person rutex    schedule 25.08.2018