首页 > 解决方案 > 有没有一种方法可以在 Clingo 中表示任意长度的元组?

问题描述

如果我想获得任意长度元组的头部,我必须编写如下代码:head(A) :- tuple(A,B)。头(A):-元组(A,B,C)。头(A):-元组(A,B,C,D)。…………

有没有一种方法可以表示 head(A) :- tuple(A...)。

谢谢!

标签: answer-set-programmingclingo

解决方案


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

避免使用不同数量的术语

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

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

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

在 Clingo 中使用外部函数

Clingo 支持定义外部函数,请参阅Python API指南。例如,我们可以用 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).

推荐阅读