• Places
    • Home
    • Graphs
    • Prefixes
  • Admin
    • Users
    • Settings
    • Plugins
    • Statistics
  • CPACK
    • Home
    • List packs
    • Submit pack
  • Repository
    • Load local file
    • Load from HTTP
    • Load from library
    • Remove triples
    • Clear repository
  • Query
    • YASGUI SPARQL Editor
    • Simple Form
    • SWISH Prolog shell
  • Help
    • Documentation
    • Tutorial
    • Roadmap
    • HTTP Services
  • Login

A.25 library(lists): List Manipulation
All Application Manual Name SummaryHelp

  • Documentation
    • Reference manual
      • The SWI-Prolog library
        • library(lists): List Manipulation
          • member/2
          • append/3
          • append/2
          • prefix/2
          • select/3
          • selectchk/3
          • select/4
          • selectchk/4
          • nextto/3
          • delete/3
          • nth0/3
          • nth1/3
          • nth0/4
          • nth1/4
          • last/2
          • proper_length/2
          • same_length/2
          • reverse/2
          • permutation/2
          • flatten/2
          • clumped/2
          • subseq/3
          • max_member/2
          • min_member/2
          • max_member/3
          • min_member/3
          • sum_list/2
          • max_list/2
          • min_list/2
          • numlist/3
          • is_set/1
          • list_to_set/2
          • intersection/3
          • union/3
          • subset/2
          • subtract/3
    • Packages
Availability::- use_module(library(lists)).(can be autoloaded)
Source[nondet]permutation(?Xs, ?Ys)
True when Xs is a permutation of Ys. This can solve for Ys given Xs or Xs given Ys, or even enumerate Xs and Ys together. The predicate permutation/2 is primarily intended to generate permutations. Note that a list of length N has N! permutations, and unbounded permutation generation becomes prohibitively expensive, even for rather short lists (10! = 3,628,800).

If both Xs and Ys are provided and both lists have equal length the order is |Xs|^2. Simply testing whether Xs is a permutation of Ys can be achieved in order log(|Xs|) using msort/2 as illustrated below with the semidet predicate is_permutation/2:

is_permutation(Xs, Ys) :-
  msort(Xs, Sorted),
  msort(Ys, Sorted).

The example below illustrates that Xs and Ys being proper lists is not a sufficient condition to use the above replacement.

?- permutation([1,2], [X,Y]).
X = 1, Y = 2 ;
X = 2, Y = 1 ;
false.
Errors
type_error(list, Arg) if either argument is not a proper or partial list.
ClioPatria (version V3.1.1-51-ga0b30a5)