Предикат DLV не выводится - PullRequest
       33

Предикат DLV не выводится

0 голосов
/ 25 августа 2018

У меня есть эта простая программа 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)» и «знает (p1, v1)» и «подключено (p1, p2)», я ожидал, что вывод программы долженсодержать "знает (p1, кусок (v1, p1, p2))".

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


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

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

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

chunk(v) :- value(v).

и без активации.Чего мне не хватает?

1 Ответ

0 голосов
/ 25 августа 2018

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

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

...