prolog - Prolog,是否可以使用变量来调用子句?
问题描述
我在 Prolog 中有以下问题。我有规矩
foo(L).
boo(L).
doo(L).
它们都返回一个不同的列表和一个规则:bar(X),它返回“foo”或“boo”或“doo”作为 X。现在我想通过说类似的话来调用适当的函数:
bar(X),
X().
这不起作用,有没有类似的方法可以做到这一点?否则我必须添加快速增加的代码量,因为将来我会声明更多类似 foo(L) 的规则。
提前致谢。
解决方案
在 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).
推荐阅读
- html - 如何将元素的高度扩展到 100vh 以上以包含整个可滚动区域?
- git - 如何在 Git 2.23 中禁用“git checkout”?
- google-data-studio - Google Data Studio:如何计算两个日期之间的天数
- javascript - 在 Svelte #await 之后调用 javascript 函数的任何方式:then
- javascript - ejs模板中的复合if语句
- git - 无法推送到 Gitlab,你不能将代码推送到这个项目
- asp.net-mvc - 带有 DateTime 的 Kendo Grid 在应用程序中显示不正确的时间,但在 localhost 中正确
- javascript - 如果有,如何将类添加到 ID
- postgresql - 撤消运行总计
- cloudflare - 在我重新部署的任何服务上获得 302 重定向