2014-02-16 47 views
1

我有一個很長的清單,我需要在數據庫中聲明。我不能寫:爲什麼L = [...]。不允許在源文件中?

L=[a,b,c,d,f]. 

f(t,g,r) :- w(L), ... 

當我托盤編譯它會給出一個錯誤消息。如果我取消L = ...線,那就沒問題。我如何在源文件中聲明一個列表?

回答

3

最好不要分配給一個全局變量,無論如何這是錯誤的語法。留下普通的Prolog,並添加一個「聲明」謂詞來保存你的長列表數據。

my_list([a,b,c,d,f]). 

會像

f(t,g,r) :- my_list(L), w(L), ... 

如果你還想使用數據存在爲「已完成」標誌,你可以使用一種模式像使用

f(t,g,r) :- (retract(my_list(L))-> w(L) ; already_done_no_L_available), ... 

但那麼你將需要聲明

:- dynamic(my_list/1). 
0

您的L=[a,b,c,d,f].行嘗試爲(=)/2標準內置謂詞定義子句。由於內置謂詞通常無法重新定義,因此在嘗試編譯文件時會收到權限錯誤。需要注意的是,由於(=)/2也被宣佈爲一個管道符,該行等同於:

'='(L, [a,b,c,d,f]). 

如果您需要代表在文件列表中,你可以簡單地選擇了信息謂詞名它所代表和加入一個事實,就像Carlo在他的回答中解釋的那樣。

相關問題