我有一個很長的清單,我需要在數據庫中聲明。我不能寫:爲什麼L = [...]。不允許在源文件中?
L=[a,b,c,d,f].
f(t,g,r) :- w(L), ...
當我托盤編譯它會給出一個錯誤消息。如果我取消L = ...線,那就沒問題。我如何在源文件中聲明一個列表?
我有一個很長的清單,我需要在數據庫中聲明。我不能寫:爲什麼L = [...]。不允許在源文件中?
L=[a,b,c,d,f].
f(t,g,r) :- w(L), ...
當我托盤編譯它會給出一個錯誤消息。如果我取消L = ...線,那就沒問題。我如何在源文件中聲明一個列表?
最好不要分配給一個全局變量,無論如何這是錯誤的語法。留下普通的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).
您的L=[a,b,c,d,f].
行嘗試爲(=)/2
標準內置謂詞定義子句。由於內置謂詞通常無法重新定義,因此在嘗試編譯文件時會收到權限錯誤。需要注意的是,由於(=)/2
也被宣佈爲一個管道符,該行等同於:
'='(L, [a,b,c,d,f]).
如果您需要代表在文件列表中,你可以簡單地選擇了信息謂詞名它所代表和加入一個事實,就像Carlo在他的回答中解釋的那樣。