我对 Clingo(和逻辑编程)完全陌生,我正在寻找实现以下基本约束的最佳方法:
Q1。我有一个谓词selected(T)
,其中 T 的范围从 1 到 N=5;如何指定至少存在一个 T这样 selected(T) ?
Q2。我有一个二元谓词wrap(E,T)
,其中 E,T 的范围从 1 到 M,N;如何指定每个 E 至少存在一个 T使得 wrap(E,T) ?
Q3。我如何指定 if selected(a)
OR selected(b)
thenselected(c)
必须为假
我实际上使用了两行代码,但可能有更好的方法:
:- selected(c), selected(a) .
:- selected(c), selected(b) .
Q4。如何指定如果某个条件 C(A) 为真,那么两个一元谓词 p1(A) 和 p2(A) 必须具有相同的值?
我实际上使用了两行代码:
p1(A) :- C(A), p2(A)
:- C(A), not p2(A), p1(A)
Q5。你推荐什么书来很好地介绍答案集编程?