Я новичок в 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. Как я могу указать, что если selected(a)
ИЛИ selected(b)
, то selected(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. Какую книгу вы можете предложить для хорошего введения в программирование наборов ответов?