2012-01-29 66 views
3

我在定义模块时遇到了一些问题。下面的代码的短路减少:在Prolog中定义模块

:- module(my_module, [word/1]). 
:- module(my_module, [alias_of/2]). 

alias_of(A, B) :- 
     alias_of(A, C), 
     alias_of(C, B). 
alias_of('Word_1', 'Word_2'). 

word(A) :- 
     alias_of(B, A), 
     word(B). 
word('Word_1'). 
word('Word_3'). 

这是SWI-Prolog的输出,当我咨询文件:

1 ?- ERROR: (i:/dev/prolog-workspace/trial.0.pro:2): 
     Undefined procedure: my_module:module/2 
      However, there are definitions for: 
       module/1 
Warning: (i:/dev/prolog-workspace/trial.0.pro:2): 
     Goal (directive) failed: my_module:module(my_module, [alias_of/2]) 

我想,从我读的教程,这暴露谓词可以使用完成: - module(module_name,[predicate_name/arity])。怎么了 ?

编辑:正如我与这个代码现在玩和测试它作为一个模块,我想通了,这是完全窃听...

回答

3

模块必须是第一个指令,并且必须出现一次。

:- module(my_module, [word/1, alias_of/2]). 
... etc... 
+0

非常基本的序言问题:每个函数之后的'/'是什么?意思? – theonlygusti 2017-09-26 22:48:40

+1

@theonlygusti它是谓词的arity。如果一个谓词需要1个参数,那么它的arity就是1.如果一个谓词需要3个参数,那么它的参数是3.谓词是true或false。 – 2017-10-22 13:38:35