Clingo:创建自定义功能

时间:2014-05-08 14:59:18

标签: answer-set-programming clingo

我很有意识地创造一个"功能"在clingo中,如果可以定义。 在我想要完成的简化版本中,我写了这个非常短的程序:

a(1..3).

adj(X,Y) :- a(X), a(Y), abs(X-Y)==1.

#hide a/1.

基本上,我想定义一个邻接函数,如果它们的差值的绝对值等于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 个答案:

答案 0 :(得分: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
相关问题