Swi prolog错误:显示true但不显示false

Swi prolog错误:显示true但不显示false,prolog,iso-prolog,Prolog,Iso Prolog,刚刚在我的W8机器上安装了SWI Prolog,它抛出了一个错误 以下是错误: ERROR: toplevel: Undefined procedure: mark/0 (DWIM could not correct goal) 假设我的prolog源文件包含一个事实: Prolog source... it_is_monday. //The fact 所以我编译了缓冲区,得到: .../documents/prolog/prologSource compiled 0.00 sec

刚刚在我的W8机器上安装了SWI Prolog,它抛出了一个错误

以下是错误:

ERROR: toplevel: Undefined procedure: mark/0 (DWIM could not correct goal)
假设我的prolog源文件包含一个事实:

 Prolog source...

 it_is_monday.   //The fact
所以我编译了缓冲区,得到:

.../documents/prolog/prologSource compiled 0.00 sec, 2 clauses
现在当我输入

it_is_monday. 
预期的输出为
true
。但是我说,

some_other_statement.
我把错误贴在上面,而不是false。谁能告诉我这里发生了什么事

解决方案:不同的prolog版本。

您会得到错误

错误:顶层:未定义过程:标记/0(DWIM无法纠正目标)

因为您尚未定义要执行的过程。(这就是为什么它说
未定义

如果您定义它,请编辑
.pl
文件并写入
some\u other\u语句。

如果你再运行一次,你就会

1 ?- some_other_statement.
true.
在Prolog中,您需要定义要执行的每个过程

当您尝试执行未定义的过程时,该过程的名称将显示在错误中。因此,如果您没有定义
某些其他语句。
,错误将是:

2 ?-  some_other_statement.
ERROR: toplevel: Undefined procedure: some_other_statement/0 (DWIM could not correct goal)
请注意,
some\u other\u语句/0
显示在我得到的错误上

编辑:如果你想得到一条
false
消息,你必须定义类似
some\u other\u语句(1)。
然后执行类似
some\u other\u语句(12)的查询。

你得到了错误

错误:顶层:未定义过程:标记/0(DWIM无法纠正目标)

因为您尚未定义要执行的过程。(这就是为什么它说
未定义

如果您定义它,请编辑
.pl
文件并写入
some\u other\u语句。

如果你再运行一次,你就会

1 ?- some_other_statement.
true.
在Prolog中,您需要定义要执行的每个过程

当您尝试执行未定义的过程时,该过程的名称将显示在错误中。因此,如果您没有定义
某些其他语句。
,错误将是:

2 ?-  some_other_statement.
ERROR: toplevel: Undefined procedure: some_other_statement/0 (DWIM could not correct goal)
请注意,
some\u other\u语句/0
显示在我得到的错误上

编辑:如果你想得到一条
false
消息,你必须定义类似
some\u other\u语句(1)。
然后执行类似
some\u other\u语句(12)的查询。


有一个标准的Prolog标志,
unknown
,在SWI-Prolog和其他现代Prolog编译器中默认设置为
error
,这意味着尝试调用未知谓词将导致异常。可以将此标志设置为(使用标准的
set\u prolog\u标志/2
谓词)而不是
fail
,以获得您似乎期望的行为,但这是不可取的,因为这可能会使调试更加困难。例如,简单地键入谓词名称将导致失败,在复杂的程序中,这可能很难跟踪,而谓词存在错误将当场查明罪魁祸首。

有一个标准的序言标志,
未知
,这在SWI Prolog和其他现代Prolog编译器中默认设置为
error
,这意味着尝试调用未知谓词将导致异常。可以将此标志设置为(使用标准的
set\u prolog\u标志/2
谓词)而不是
fail
,以获得您似乎期望的行为,但这是不可取的,因为这可能会使调试更加困难。例如,简单地键入谓词名称将导致失败,在复杂的程序中,这可能很难跟踪,而谓词存在错误将当场查明罪魁祸首。

如果您希望从中接收false,则可以添加指令

:- dynamic(some_other_statement/0).
在文件开始时,因此在执行查询时

?- some_other_statement.

如果您想从中接收false,您可以添加指令,您将得到false

:- dynamic(some_other_statement/0).
在文件开始时,因此在执行查询时

?- some_other_statement.

您将得到false

很抱歉,我没有在问题中声明我预期的是false而不是错误,因此产生了混淆。我在另一台机器上使用了一个旧版本的prolog,当出现一个未定义的过程时,它输出false。我不知道以前的版本,但在当前版本中,您会收到提到的错误抱歉,我没有在问题中声明我预期的是false而不是错误,因此会产生混淆。我在另一台机器上使用了一个旧版本的prolog,当出现一个未定义的过程时,它输出false。我不知道以前的版本,但在当前版本中,您会看到提到的错误是的,这是一个有用的功能。我没有定义一个谓词,或者在命名谓词时出现了一些拼写错误/更改,这无疑是我在编写序言时最典型的错误。当然,如果你想用
fail
结果删除一个谓词,这可能是一个有用的策略。是的,这是一个有用的特性。我没有定义一个谓词,或者在命名谓词时出现了一些拼写错误/更改,这无疑是我在编写序言时最典型的错误。当然,如果想要用
fail
结果删除谓词,这可能是一种有用的策略。