我正在阅读有关序言的教程,但出现错误。
在我的文件中,我写道:
sunny.
运行GNU时,我写sunny.
并得到“是”。
当我写foggy.
时出现错误
如本教程所示,uncaught exception: error(existence_error(procedure,foggy/0),top_level/0)
而非“否”。
答案 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
| ?-
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
| ?-