Prolog / ASP(Clingo)到CLIPS转换器

时间:2018-07-04 00:28:52

标签: prolog logic clips answer-set-programming clingo

有没有简单的方法可以将Prolog / ASP代码转换为CLIPS?

类似这样的事情,但是使用CLIPS而不是Prover9: https://github.com/potassco/anthem/tree/master/examples

1 个答案:

答案 0 :(得分:2)

当前向链接引擎允许您进行不确定的choice操作时,可以将一些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).

这是一个跟踪Prolog的执行,代码将首先尝试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