首页 > 解决方案 > Prolog,是否可以使用变量来调用子句?

问题描述

我在 Prolog 中有以下问题。我有规矩

foo(L).
boo(L).
doo(L).

它们都返回一个不同的列表和一个规则:bar(X),它返回“foo”或“boo”或“doo”作为 X。现在我想通过说类似的话来调用适当的函数:

bar(X),
X().

这不起作用,有没有类似的方法可以做到这一点?否则我必须添加快速增加的代码量,因为将来我会声明更多类似 foo(L) 的规则。

提前致谢。

标签: prolog

解决方案


在 SWI-Prolog 中有一个=../2操作符,它的工作方式如下:foo(bar) =.. [foo, bar]
结合使用call/1它并且它可以工作。有时以下方法也有效:

foo(L).
boo(L).
doo(L).

bar(X).
Goal =.. [X, L].
Goal.   % If this does not work, use call(Goal).

推荐阅读