【问题标题】:Prolog/ASP(Clingo) to CLIPS translaterProlog/ASP(Clingo) 到 CLIPS 翻译器
【发布时间】:2018-12-12 08:17:54
【问题描述】:

有没有什么简单的方法可以将 Prolog/ASP 代码翻译成 CLIPS?

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

【问题讨论】:

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


    【解决方案1】:

    当前向链接引擎允许您进行非确定性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
    

    【讨论】:

    • 不是我想要的,但无论如何感谢试用。欣赏它。
    • 我检查了 CLIPS 文档,但找不到任何关于选择或回溯的信息。只做万能之类的东西。但你需要一个做和回溯做。选择是出现在您提供的链接上的第一件事:github.com/potassco/anthem/blob/master/examples/choice-rules.lp
    猜你喜欢
    • 2018-03-08
    • 2011-04-24
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多