如果我想获得任意长度元组的头部,我必须编写如下代码:head(A) :- tuple(A,B)。头(A):-元组(A,B,C)。头(A):-元组(A,B,C,D)。…………
有没有一种方法可以表示 head(A) :- tuple(A...)。
谢谢!
如果我想获得任意长度元组的头部,我必须编写如下代码:head(A) :- tuple(A,B)。头(A):-元组(A,B,C)。头(A):-元组(A,B,C,D)。…………
有没有一种方法可以表示 head(A) :- tuple(A...)。
谢谢!
我看到两种可能的解决方案:
避免使用不同数量的术语
这可以通过改变元组的表示来完成:
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).