在 clingo 中的规则主体中的分离

问题描述

我认为这是基本的,但是您如何在 clingo 中将文字与规则主体进行分离?我试过了

p3 :- p1 ; p2. 但它不起作用,它假设了

的答案

p3 :- p1,p2.

谢谢。

解决方法

正文中的析取只是“隐式”。 这意味着您可以通过使用两个规则来实现这一点:

p3 :- p1.
p3 :- p2.

或者使用一阶变量

p(3) :- p(1..2).

dom(1..2).
p(3) :- p(X),dom(X).

所有三个版本都基于同一组规则

p(3):-p(2).
p(3):-p(1).

(如果 p(1)p(2) 实际上是可派生的) 您可以通过添加行来检查这一点

{p(X) : dom(X)}.

并使用 clingo --text