2011-12-07 28 views
1

當我使用的Prolog的內部謂詞「減/ 3」:在例如減(+套裝,+刪除,-Result):序言 - 減去每個項目只有一次

subtract([a,b,c,d,c,c,d,e], [c,a], X). 
X = [b, d, d, e]. 

,但我想減去+從+設置一次刪除每個項目。我的意思是,我想要

subtract([a,b,c,d,c,c,d,e], [c,a], X). to give 
X = [b, d, c, c, d, e]. 

我該怎麼做?

回答

2

你可以建立你自己的程序來做到這一點。 例如:

subtract_once(List, [], List). 
subtract_once(List, [Item|Delete], Result):- 
    (select(Item, List, NList)-> 
    subtract_once(NList, Delete, Result); 
    (List\=[],subtract_once(List, Delete, Result))). 

在每次迭代從項目列表採取一個項目刪除,並提取從輸入列表中的一個元素,然後繼續使用這兩個列表的其餘部分。

+0

嘿,謝謝你的幫助。但是這個謂詞有一個問題。當我做? - subtract_once([a,a,b],[a,a,a],X)時,它給出X = [b]。但是我希望它在這種情況下是虛假的。我該如何解決這個問題? – void

2

你可以做一些沿着這些路線:

subtract_custom(Remainder, [], Remainder). 
subtract_custom(List, [Current|Delete], X) :- 
    select(Current, List, Rest), 
    subtract_custom(Rest, Delete, X). 

它,如果你想要在刪除失敗就失敗。否則你必須適應一點。

+0

感謝您的努力,但gusbro已經給出了答案。有沒有辦法「回報」兩位答疑者? – void

+0

是的,你也可以Upvote這個答案。 – crashmstr

相關問題