【问题标题】:Clingo: create custom functionClingo:创建自定义函数
【发布时间】:2014-05-08 14:59:17
【问题描述】:

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

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))。

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

【问题讨论】:

    标签: answer-set-programming clingo


    【解决方案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
    

    【讨论】:

    • 此外,我在 abs 中使用了错误的 (gringo) 语法,即 #abs,或者在 cligo 中只是 |·|。因此adj(X,Y) :- a(X), a(Y), |X-Y|==1 也同样有效。
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多