我试图定义一个谓词" run(ABC,DE)"哪里 ABC是其中一个谓词的函子,DE是它的组成部分。
run(ABC, DE) :- ....................
ab(ff).
cc(dd).
ee(ll).
基本上,我试图选择ABC作为我想在数据库中选择的仿函数,并获得DE作为其组件的值。 例如,
?- run(ab, DE).
DE = ff.
帮助PLZ
答案 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.