Clingo: создать пользовательскую функцию
Я в конце, чтобы создать "функцию" в клинго, если таковая может быть определена. В упрощенной версии того, что я пытаюсь выполнить, я написал эту очень короткую программу:
a(1..3).
adj(X,Y) :- a(X), a(Y), abs(X-Y)==1.
#hide a/1.
По сути, я хочу определить функцию смежности, которая будет содержать любые два числа true
если абсолютная величина их разности равна единице. То, что я ожидал бы от вышеупомянутой программы, должно вывести результаты: adj(1,2) adj(2,1) adj(2,3) adj(3,2)
Тем не менее, мне представлен этот вывод:
Answer: 1
SATISFIABLE
Models : 1
Time : 0.000
Prepare : 0.000
Prepro. : 0.000
Solving : 0.000
(если я опущу #hide a/1.
он выведет ответ: a(1) a(2) a(3)
).
Я чувствую, что это clingo 101, так что, может быть, я неправильно понимаю основы здесь. Я пытаюсь выучить клинго, изучая примеры, с которыми я сталкиваюсь в Интернете, но я как бы тороплюсь с этим, потому что у меня назначено задание завтра. Если бы кто-нибудь мог пролить немного света, это было бы здорово. Благодарю.
1 ответ
Решаемые. Оказывается родной abs
функция на самом деле не работает так, как я ожидал, но определяя оба условия для adj
Функция выполняет дизъюнктивный трюк и работает как шарм. Это:
a(1..3).
adj(X,Y) :- a(X), a(Y), X-Y==1.
adj(X,Y) :- a(X), a(Y), Y-X==1.
#hide a/1.
Выходы:
Answer: 1
adj(3,2) adj(2,1) adj(2,3) adj(1,2)
SATISFIABLE
Models : 1
Time : 0.000
Prepare : 0.000
Prepro. : 0.000
Solving : 0.000