3

如果可以定义的话,我无法在 cligo 中创建一个“函数”。在我想要完成的简化版本中,我编写了这个非常简短的程序:

a(1..3).

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

#hide a/1.

基本上,我想定义一个邻接函数,true如果它们的差值的绝对值等于 1,则给定任何两个数字都将成立。我对上述程序的期望是输出结果: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)

我觉得这是 clgo 101,所以也许我误解了这里的基础知识。我正在尝试通过学习我在网上偶然发现的示例来学习 Clingo,但我有点匆忙完成它,因为我明天有作业。如果有人能提供一些启示,那就太好了。谢谢。

4

1 回答 1

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
于 2014-05-08T17:19:53.773 回答