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).
然后可以将这些事实与 :
运算符一起使用以生成集合等...
我正在寻找这样的东西:
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).
然后可以将这些事实与 :
运算符一起使用以生成集合等...