小编Ele*_*ena的帖子

给定谓词和列表的 Prolog 基础

给定一个谓词和一个列表,我想要一个所有可能的接地方式的列表。例如:

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

3
推荐指数
1
解决办法
61
查看次数

标签 统计

prolog ×1