给定一个谓词和一个列表,我想要一个所有可能的接地方式的列表。例如:
gounding(predicate(X), [a,b,c], Grounded).
Run Code Online (Sandbox Code Playgroud)
应该返回
[predicate(a), predicate(b), predicate(c)]
Run Code Online (Sandbox Code Playgroud)
而且我还希望它使用多个变量,例如:
grounding(predicate(X,Y), [a,b,c], Grounded).
Grounded = [predicate(a,a), predicate(a,b), predicate(a,c), predicate(b,a), predicate(b,b), predicate(b,c), predicate(c,a), predicate(c,b), predicate(c,c)]
Run Code Online (Sandbox Code Playgroud)
问题在于谓词并不总是相同的,因此需要将其作为变量传递。喜欢:
grounding(Predicate, Arity, [a,b,c], Grounded).
Run Code Online (Sandbox Code Playgroud)
是否有什么已经这样做了还是应该手动完成?我尝试将atom_concat与谓词的名称、方括号和列表的元素一起使用,但它返回带有引号的列表,例如:
['predicate(a)', 'predicate(b)', 'predicate(c)']
Run Code Online (Sandbox Code Playgroud) prolog ×1