3

我刚刚开始学习Prolog,如果这有点天真,或者说太天真,请原谅我。我正在尝试定义这个谓词

| ?- times(M,N,Product) :- Product is M*N.

这给了我这个错误

uncaught exception: error(existence_error(procedure,(:-)/2),top_level/0)

我正在使用 GNU Prolog。这里有什么问题?

4

2 回答 2

6

正如 false 所说,如果要在解释器执行期间定义谓词或函数,则必须进入解释器的“用户”模式,输入:

['user'].

输入谓词后,您只需要离开这个“区域”,以向解释器确认您已完成编码,并且它可以开始将您的谓词编译为字节码 - 您将是,然后,允许通过您的函数名称访问。

要离开“用户”模式,只需按ctrl + d

在 swipl 和 gprolog 中测试:

SWI-Prolog version 5.10.4
(GNU Prolog) 1.3.0

问候!

于 2012-12-05T15:45:18.223 回答
0

检查用户手册 8.7 动态子句管理,尤其是:asserta/assertz。

接下来将帮助您在 gprolog 中定义新的谓词:

asserta( ( times(M,N,Product) :- 产品是 M*N ) )。

于 2014-01-07T13:37:35.920 回答