为什么会出现:未捕获的异常:error(existence_error(procedure,foggy / 0),top_level / 0)?

时间:2019-02-24 17:44:28

标签: prolog

我正在阅读有关序言的教程,但出现错误。

在我的文件中,我写道: sunny.

运行GNU时,我写sunny.并得到“是”。

当我写foggy.时出现错误
如本教程所示,uncaught exception: error(existence_error(procedure,foggy/0),top_level/0)而非“否”。

1 个答案:

答案 0 :(得分:3)

本教程可能会假设某个特定的Prolog实现。

在GNU Prolog中,如果您进行查询并且带有该数量参数的谓词不存在,并且尚未发出任何指示该谓词存在的指令,那么您将得到一个existence_error。您需要在GNU Prolog中包括的是有关您计划查询但可能尚未断言的谓词或事实的信息。它被认为是一个动态的事实或谓词,您可以使用dynamic/1指令。

因此发出指令dynamic(foggy/0).

$ gprolog
GNU Prolog 1.4.4 (64 bits)
Compiled Oct 16 2017, 09:23:33 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?- foggy.
uncaught exception: error(existence_error(procedure,foggy/0),top_level/0)
| ?- [user].
compiling user for byte code...
:- dynamic(foggy/0).

user compiled, 2 lines read - 122 bytes written, 6200 ms

yes
| ?- foggy.

no
| ?-


正如@false在注释中指出的那样,您还可以设置Prolog unknown标志。有关GNU Prolog的信息,请参见set_prolog_flag documentation

$ gprolog
GNU Prolog 1.4.4 (64 bits)
Compiled Oct 16 2017, 09:23:33 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?- foggy.
uncaught exception: error(existence_error(procedure,foggy/0),top_level/0)
| ?- set_prolog_flag(unknown, fail).

(1 ms) yes
| ?- foggy.

no
| ?-