【问题标题】:Is there a method to represent arbitrary length tuple in Clingo?有没有一种方法可以在 Clingo 中表示任意长度的元组?
【发布时间】:2020-05-12 07:32:03
【问题描述】:

如果我想得到任意长度元组的头部, 我必须像这样编码: 头(A):-元组(A,B)。 头(A):-元组(A,B,C)。 头(A):-元组(A,B,C,D)。 .......

有没有一种方法可以代表 头(A):-元组(A...)。

谢谢!

【问题讨论】:

  • 有什么理由需要用不同的元组来表示元组吗?如果不是,那么您可以将元组表示为列表,即tuple(d,e,f) 可以表示为tuple(d, tuple(e, tuple(f, nil))).。然后,头部谓词可以定义为head(X) :- tuple(X, _).

标签: answer-set-programming clingo


【解决方案1】:

我看到了两种可能的解决方案:

避免使用不同数量的术语

这可以通过改变元组的表示来完成:

tuple(a, nil).
tuple(b, tuple(c, nil)).
tuple(d, tuple(e, tuple(f, nil))).

head(X) :- tuple(X, _).

在 Clingo 中使用外部函数

Clingo 支持外部函数的定义,参见Python APIguide。例如,我们可以用 Python 编写可以操纵术语的函数。作为一种解决方法,我建议对术语使用进一步的构造函数,此处为c

#script (python)
import clingo
def head(x):
      return x.arguments[0]
#end.

tuple(c(1)).
tuple(c(2,3)).
head(@head(X)) :- tuple(X).

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2021-01-21
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2016-01-04
    • 2018-06-17
    相关资源
    最近更新 更多