【问题标题】:Define a predicate "run(....)" in prolog在 prolog 中定义谓词“run(....)”
【发布时间】:2015-03-17 21:27:15
【问题描述】:

我正在尝试定义一个类似于“run(ABC, DE)”的谓词,其中 ABC 是其中一个谓词的函子,DE 是它的组成部分。

run(ABC, DE) :- ....................
ab(ff).
cc(dd).
ee(ll).

基本上,我正在尝试选择 ABC 作为我想在数据库中选择的函子,并获取 DE 的值作为其组件。 例如,

?- run(ab, DE).
DE = ff.

请帮忙

【问题讨论】:

  • 你应该看看call

标签: prolog


【解决方案1】:

使用 univ (=..) 运算符,您可以在其组件列表中拆分一个术语,请查看post

?- funtor(Term1, Term2)=..List.
List = [funtor, Term1, Term2].

?- ab(ff) =.. List2.
List2 = [ab, ff].

?- member(X, [a,b,c]) =.. List3.
List3 = [member, X, [a,b,c]].

现在,您需要做的就是创建一个谓词来评估任何术语列表,我们称之为元:

meta(L):- Term =.. L, Term.

现在,在您的查询中,您必须使用与 univ 运算符相同的语法传递术语,其中列表的第一个元素是您要评估的子句的函子,其余元素在list 是该函子的参数。

?- meta([ab, X]).
X = ff.

【讨论】: