Newsgroups: comp.lang.prolog
Path: cantaloupe.srv.cs.cmu.edu!das-news2.harvard.edu!news2.near.net!news.mathworks.com!uhog.mit.edu!europa.eng.gtefsd.com!howland.reston.ans.net!news.sprintlink.net!EU.net!Germany.EU.net!Munich.Germany.EU.net!ecrc!news
From: joachim@ecrc.de (Joachim Schimpf)
Subject: Re: Subset code
Message-ID: <CywI1w.7xq@ecrc.de>
Sender: news@ecrc.de
Reply-To: joachim@ecrc.de
Organization: European Computer-industry Research Centre GmbH, Munich, Germany
References: <geoff.784196084@coral.cs.jcu.edu.au>
Date: Mon, 7 Nov 1994 14:10:43 GMT
Lines: 32

In article 784196084@coral.cs.jcu.edu.au, geoff@coral.cs.jcu.edu.au (Geoff Sutcliffe) writes:
>Hi,
>
>I have an application in which I need to create, on backtracking, all 
>subsets of a given set in decreasing order of size. Example
>?- subset([q,w,e]).
>must, by backtracking, return [q,w,e] [q,w] [q,e] [w,e] [q] [w] [e] [] 
>_in that order_.
>


decreasing_subset(Sub, List) :-
	same_or_shorter(Sub, List),
	subset(Sub, List).

same_or_shorter([_|Xs], [_|Ys]) :-
	same_or_shorter(Xs, Ys).
same_or_shorter([], _).

subset([],_).
subset([X|Xs], [X|Ys]) :-
	subset(Xs, Ys).
subset([X|Xs], [_|Ys]) :-
	subset([X|Xs], Ys).


---------------------------------------------------------------------------
 Joachim Schimpf                                 Email   joachim@ecrc.de 
 European Computer-Industry Research Centre      Phone   +49 89 92699 111
 Arabellastrasse 17, D-81925 Munich, Germany     Fax     +49 89 92699 170


