定义一个谓词" run(....)"在prolog

时间:2015-03-17 21:27:15

标签: prolog

我试图定义一个谓词" run(ABC,DE)"哪里 ABC是其中一个谓词的函子,DE是它的组成部分。

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

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

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

帮助PLZ

1 个答案:

答案 0 :(得分:0)

使用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运算符使用的语法相同的语句来传递该术语,其中列表的第一个元素是您要评估的子句的funtor,以及其中的其余元素。列表是该导师的论据。

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