如何将过程作为prolog的输入

如何将过程作为prolog的输入,prolog,Prolog,我正在用Prolog做作业。我想给出一些过程作为输入,而不是用代码编写它们 例如,目前: 我的代码是: friends(aa,bb). friends(bb,cc). abc(X, Y) :- friends(X,Y). 我的输入命令是 abc(aa,Y). 输出是 Y = bb 但我希望我的代码是这样的 abc(X, Y) :- friends(X,Y). 还有一些方法将friends过程作为输入,并获得相同的输出。您可以使用调用: friends(aa, bb).

我正在用Prolog做作业。我想给出一些过程作为输入,而不是用代码编写它们

例如,目前:

我的代码是:

friends(aa,bb).
friends(bb,cc).
abc(X, Y) :-
    friends(X,Y).
我的输入命令是

abc(aa,Y).
输出是

Y = bb

但我希望我的代码是这样的

abc(X, Y) :-
    friends(X,Y).

还有一些方法将
friends
过程作为输入,并获得相同的输出。

您可以使用
调用

friends(aa, bb).
friends(bb, cc).

indirect_abc(Goal_2, X, Y) :-
    call(Goal_2, X, Y).
测试:


编辑:在下面的注释之后,变量名
Goal_2
可以理解为“需要两个参数才能成为目标的术语”<代码>调用提供这些参数并调用结果目标。

目标
不是目标。这是一个缺少两个理由的目标。因此,
Goal_2
可能是一个更好的名字。谢谢,我改了名字。我不是100%确定这是最好的名字,但我同意以某种方式明确这是一个好主意。到目前为止,在Prolog中还没有使用像
\u 2
这样的后缀。该后缀仅用于命名其他未命名的变量。直接添加一个数字,而不是指差异列表和累加器的不同位置。我很想输入这样的参数。我想告诉程序,
aa
bb
的朋友,
bb
是输入中
cc
的朋友。但在您的示例中,这包含在程序本身中
?- indirect_abc(friends, X, Y).
X = aa,
Y = bb ;
X = bb,
Y = cc.

?- indirect_abc(friends, aa, Y).
Y = bb.