[ library(lists) | Reference Manual | Alphabetic Index ]

# subset(?SubList, +List)

Succeeds if List is the list which contains all elements from SubList in the same order as in SubList.

?SubList
  A term which unifies with a list.
+List
  A term which unifies with a list.

## Description

Used to test if a specified list contains all elements of another list, or to generate all sublists of a given list.

The definition of this Prolog library predicate is:

            subset([],[]).
            subset([X|L],[X|S]) :-
                subset(L,S).
            subset(L, [_|S]) :-
                subset(L,S).

This predicate does not perform any type testing functions.

This predicate works properly for set operations only, so repeated elements, variable elements and unsorted lists should not be used.

### Modes and Determinism

- subset(-, +) is multi

### Fail Conditions

Fails if SubList does not unify with a list whose elements are all contained in List in the same order as in SubList.

### Resatisfiable

Yes.

## Examples

    Success:
          subset([1,3], [1,2,3]).
          subset(X, [1,3,4]).        % backtracks over all subsets

    Fail:
          subset([2,1], [1,2,3]).   % different order

## See Also

union / 3, subtract / 3, intersection / 3