2012-01-29 97 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