2011-07-14 37 views
14

我想保持我的Prolog代碼的模塊化,我想知道如果任何人有任何意見,如何做到這一點。我用這種簡單的consult這樣做的方式,但是隨着我的文件數量增加並且屈服於命名衝突,這變得越來越麻煩。是否有任何類似於「典型」導入的構造,如大規模編程與序言

%-------------------------------------------------------------------- compiler.pl 

[ scanner, parser, codegen ] . 

%-------------------------------------------------------------------- compile 

% compile(S, I) :- Compiling the source string S gives the list of instructions 
%     I 

compile(S, I) :- scan(S, T), parse(T, A), codegen(A, I) . 

%-------------------------------------------------------------------------------% 

位於源文件的頂部?如果程序特定,我使用gprolog。預先感謝您的幫助。

回答

6

獲取當前Logtalk開發版本,它提供了GNU Prolog的1.4.0的穩定版本全面支持。您可以通過執行Subversion簽出或Git克隆來獲得它(詳情請參閱http://logtalk.org/download.html)。或者只是私下給我發郵件,我會爲你建立一個安裝程序。 Logtalk是從頭開始設計用於大型編程。您可以使用它來編寫可移植的應用程序(Logtalk在九個不同的Prolog編譯器上按原樣運行)。您甚至可以使用它在不包含模塊系統的Prolog編譯器(如GNU Prolog)中運行Prolog模塊代碼。 Logtalk附帶近一百個示例,包括便攜式庫和完整文檔。從Prolog到Logtalk非常簡單。編寫可移植的代碼跳動每天;-)

10

GNU的序言不具有真正的模塊系統,讓你的方法是目前你可以得到最好的。也許GNU-Prolog可能會在未來添加一個模塊系統,但我不會在這個系統上打賭。

最常見的模塊系統允許在不同的模塊來定義謂詞具有相同的謂詞名稱和元數。從而避免謂詞的名稱衝突。原子和函數在模塊邊界上保持不變。像SICStus,YAP,SWI,Ciao,IF和ISO標準的系統都有這樣的系統。

另一種模塊系統是由XSB提供 - 被稱爲函子爲主。

4

說錯什麼是對的。
然而,你可能會考慮Logtalk它實現了一個模塊系統,以及在幾個Prologs之上的面向對象系統(GNU-Prolog的在內)。

http://logtalk.org/faq.html#general-3

http://logtalk.org/

+1

所提到的基於謂詞模塊系統都非常相似,他們是應當開源或商業移植。從一個移植到另一個相對簡單。也就是說,你有幾個可能的提供者。 Logtalk系統非常不同,只有一個來源。 – false

+3

是的,Logtalk是不同的。但是,儘管存在差異,Logtalk在其大部分功能中包含了Prolog模塊,並且能夠將Prolog模塊編譯爲對象。例如,目前的大多數SWI-Prolog基本庫都可以通過將文件擴展名從.pl改爲.lgt來作爲對象進行編譯和使用。 –