2012-04-30 49 views
0

PROLOG我有一個邏輯基礎條目(它存儲在內存中),我必須將其轉換爲條目列表。PROLOG - 條目LIST的條目的邏輯基礎

例如:

| ?- rule(A,B). 

A = member(_h209,[_h209|_h212]) 
B = true; 

A = member(_h209,[_h211|_h212]) 
B = member(_h209,_h212); 

TO

[member(_h209,[_h209|_h212]),true,member(_h209,[_h211|_h212]),member(_h209,_h212);] 

任何人都可以請讓我知道我怎樣才能得到它。

+0

爲什麼要扁平頭部和身體?我無法想象這是否合理。 – false

回答

0

一些接近您預期的結果(除了在最後的分號)可能是:

rule_list(Rules) :- 
    findall([A, B], rule(A, B), L), 
    flatten(L, Rules). 

上_h209的說明,在成員的第一個位置出現:我不知道,你知道這樣的意義符號。這些是變量,如果您對這些表達的身份感興趣,我的建議是不正確的。在這種情況下使用bagof。

+0

非常感謝@chac的回覆..我基本上還想從列表中刪除重複項。但'setof(L,findall([A,B],rule(A,B),L),Set)'不起作用。你能幫忙嗎? –

+0

嵌套過多...嘗試'setof([A,B],規則(A,B),LPairs),拼合(LPairs,Set)'。或者添加'sort(Rules,RulesNoDupl)'到發佈的代碼 – CapelliC