我想在Prolog中實現某種「數據庫」。在序言中實現數據庫
我有兩個想法來模擬表和行:
% First one
client('B069','Laurent','769, rue de la LALALA','LLN','A1',10000).
% Second one
data(client,'B069',name,'Laurent').
data(client,'B069',adress,'69, rue de la LALALA').
data(client,'B069',town,'LLN').
data(client,'B069',cat,'A1').
data(client,'B069',amount,10000).
隨着兩種模式,我可以例如分別做一個「SELECT ID從客戶WHERE量> 0」爲正金額的客戶:
% First one
client1_positive(Client) :- findall(ID,(data(client,ID,compte,Amount),Amount>0),Client).
% Second one
client2_positive(Client) :- findall(ID,(client(ID,_,_,_,_,Amount),Amount>0),Client).
它們都具有相同的輸出;
?- client1_positive(Clients).
Client = ['B069'].
?- client2_positive(Clients).
Client = ['B069'].
但這裏是我的問題,因爲我很新的Prolog的我完全不知道我怎麼可以使動態,如「選擇的名字從客戶WHERE ID =‘B069’」。我可以爲這個特定的SQL查詢實現一個規則,但是我找不到實現更抽象的規則的方法,因此每個查詢都可以被解釋。
如何在Prolog中對這些數據建模是否有最佳實踐?還有一些想法(不是我的問題的詳細答案)如何在Prolog中使請求更加抽象?
非常感謝
謝謝,幫助我。你是否知道這個模型,我可以如何獲得客戶端的第二個參數,例如'nnth_arg(+ Predicate,+ Nth,-Argument)'的規則。這種規則是否存在? – tomatediabolik
@tomatediabolik在這種情況下,你知道每個參數位置的含義。按索引選擇參數的用例是什麼?通常,你可能有'client_phone(ClientId,Phone): - client(CllientId,_,_,Phone).'或類似的東西。如果你真的需要通過索引來挑選它,你可以使用'arg/3'('arg(+ Nth,+ Term,-Argument)')來獲得一個詞的第n個參數。沒有關於你的用例的更多信息,我不知道還有什麼要說的。 – lurker