如何在GNU Prolog中定义一个虚拟/占位符谓词



我有一个Prolog文件,结构如下:

% LIBRARY SECTION %
foo(X) :- bar(X);
          baz(X).
% USER DATA SECTION %
% e.g. bar(charlie).

文件的用户数据允许用户扩展,但默认情况下不包含任何内容。但是这会导致查询foo(X).失败,因为bar/1baz/1没有定义。

我已经尝试用占位符值(即bar(none).)定义它们,但是当用户数据添加到文件底部时,GNU Prolog抱怨不连续的谓词。

是否有另一种方法来定义bar/1baz/1的虚拟/占位符版本,以便foo(X).不会失败,并且可以将包含barbaz的其他行添加到文件的底部?

如果我理解了这个问题,你想要的是这样的内容:

<>之前ask_bar: -%获取用户输入assertz(酒吧(输入))。foo (X): -酒吧(X)。之前

如果这确实是问题所在,您有两个选择:

第一个:将bar/1声明为动态谓词:
:- dynamic(bar/1).

(这是一个指令,您只需在行首键入:-。)

第二个:在你的程序中,在引用bar/1之前,调用谓词retractall/1,像这样:<>之前主要:retractall(酒吧(_)),%……之前

这将从数据库中删除所有的bar s, bar/1声明为dynamic

相关内容

  • 没有找到相关文章

最新更新