2012-12-05 44 views
3

我刚刚开始学习Prolog,所以如果这有点天真,或者相当幼稚,请原谅我。我试图定义这个谓词无法在Prolog中定义谓词

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

这给了我这个错误

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

我使用GNU Prolog的。这里有什么错?

+0

这很奇怪。我使用GNU Prolog(通过IDEOne)尝试了它,并没有发生错误)。 – RonaldBarzell

+1

在规则之前输入'[user] .'。 – false

+0

@false:你能不能详细一点? – OneMoreError

回答

6

假说,如果你想解释的执行过程中定义一个谓语或功能,您必须输入翻译的“用户”模式,通过键入:

['user']. 

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

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

测试中都swipl和gprolog:

SWI-Prolog version 5.10.4 
(GNU Prolog) 1.3.0 

商祺!

0

检查用户手册8.7特别是动态子句管理:asserta/assertz。

接下来将帮助你在gprolog定义新的断言:

asserta的((倍(M,N,产品): - 产品是M * N))。