Переводчик с Пролога / ASP (Clingo) на CLIPS - PullRequest
0 голосов
/ 04 июля 2018

Есть ли простой способ перевести код Prolog / ASP в CLIPS?

Примерно так, но с CLIPS вместо Prover9: https://github.com/potassco/anthem/tree/master/examples

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете перевести некоторые из ASP в прямое сцепление, когда механизм прямого связывания позволяет вам недетерминированные выбор действия. Результатом будет дизъюнктивная логическая программа головы. Вот пример маленькой программы ASP:

:- p, q, r.
{p,r}.
{q} :- p.
{r} :- p.

Затем вы можете переписать это в правила прямой цепочки. Для краткости мы использовали наше действие (;) / 2 в главе правил прямой цепочки:

fail <= posted(p), posted(q), posted(r).
post(p); post(r) <= posted(init).
post(q) <= posted(p).
post(r) <= posted(p).

Вот трассировка выполнения Пролога, код сначала попытается выполнить p, но ограничение p, q, r будет препятствовать этому элементу набора ответов в качестве решения:

Jekejeke Prolog 3, Development Environment 1.3.2
(c) 1985-2018, XLOG Technologies GmbH, Switzerland

?- post(init).
    0 Call post(init) ? 
    1 Call post(p) ? 
    2 Call clause(q, true) ? 
    2 Fail clause(q, true) ? 
    2 Call post(q) ? 
    3 Call clause(p, true) ? 
    3 Exit clause(p, true) ? 
    3 Call clause(r, true) ? 
    3 Fail clause(r, true) ? 
    2 Exit post(q) ? 
    2 Call post(r) ? 
    3 Call clause(p, true) ? 
    3 Exit clause(p, true) ? 
    3 Call clause(q, true) ? 
    3 Exit clause(q, true) ? 
    3 Call fail ? 
    3 Fail fail ? 
    2 Fail post(r) ? 
    1 Fail post(p) ? 

В приведенном выше пункте / 2 проверяются тела логической программы дизъюнктивной головки. Затем интерпретатор Prolog вернется к r в качестве элемента набора ответов:

    1 Call post(r) ? 
    2 Call clause(p, true) ? 
    2 Fail clause(p, true) ? 
    1 Exit post(r) ? 
    0 Exit post(init) ? 
Yes
...