Clingo:我可以匹配多个变量(有点像 varargs)吗?

Clingo: Can I match multiple variables (sorta like varargs)?

我正在寻找这样的东西:

g(X, ...Y) :- f(X, ...Y) .

这将是一个语法糖:

g(X, Y) :- f(X, Y) .
g(X, Y, Z) :- f(X, Y, Z) .
g(X, Y, Z, Z1) :- f(X, Y, Z, Z1) .
%...and so on

有什么方法可以提供一些这样的语法糖,只是我需要少打字吗?

不,谓词参数没有这样的东西。 但您可以改用函数。

f((1)).
f((1,2)).
f((1,2,3)).
f((1,2,3,4)).
g(X) :- f(X).

这里的关键是f只有一个参数,是一个元组。 X 指的是整个元组。 然后,您仍然可以使用访问特定元组的单个元素 h(X) :- g((,,X)).

备注: 我认为一般来说,您的数据结构存在问题,您的 f/n 参数数量未知。您无法编写有关这些事实的规则,因为您不知道参数的含义或数量。如果你想存储例如[a,b,c,d,e] 的列表,使用类似:

f(id1,a).
f(id1,b).
f(id1,c).
f(id1,d).
f(id1,e).

然后可以将这些事实与 : 运算符一起使用以生成集合等...