2011-12-07 30 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

相关问题