proplists(3erl) Erlang Module Definition proplists(3erl)
NAME
proplists - Support functions for property lists.
DESCRIPTION
Property lists are ordinary lists containing entries in the form of ei-
ther tuples, whose first elements are keys used for lookup and inser-
tion, or atoms, which work as shorthand for tuples {Atom, true}. (Other
terms are allowed in the lists, but are ignored by this module.) If
there is more than one entry in a list for a certain key, the first oc-
currence normally overrides any later (irrespective of the arity of the
tuples).
Property lists are useful for representing inherited properties, such
as options passed to a function where a user can specify options over-
riding the default settings, object properties, annotations, and so on.
Two keys are considered equal if they match (=:=). That is, numbers are
compared literally rather than by value, so that, for example, 1 and
1.0 are different keys.
DATA TYPES
property() = atom() | tuple()
proplist() = [property()]
EXPORTS
append_values(Key, ListIn) -> ListOut
Types:
Key = term()
ListIn = ListOut = [term()]
Similar to get_all_values/2, but each value is wrapped in a list
unless it is already itself a list. The resulting list of lists
is concatenated. This is often useful for "incremental" options.
Example:
append_values(a, [{a, [1,2]}, {b, 0}, {a, 3}, {c, -1}, {a, [4]}])
returns:
[1,2,3,4]
compact(ListIn) -> ListOut
Types:
ListIn = ListOut = [property()]
Minimizes the representation of all entries in the list. This is
equivalent to [property(P) || P <- ListIn].
See also property/1, unfold/1.
delete(Key, List) -> List
Types:
Key = term()
List = [term()]
Deletes all entries associated with Key from List.
expand(Expansions, ListIn) -> ListOut
Types:
Expansions = [{Property :: property(), Expansion ::
[term()]}]
ListIn = ListOut = [term()]
Expands particular properties to corresponding sets of proper-
ties (or other terms). For each pair {Property, Expansion} in
Expansions: if E is the first entry in ListIn with the same key
as Property, and E and Property have equivalent normal forms,
then E is replaced with the terms in Expansion, and any follow-
ing entries with the same key are deleted from ListIn.
For example, the following expressions all return [fie, bar,
baz, fum]:
expand([{foo, [bar, baz]}], [fie, foo, fum])
expand([{{foo, true}, [bar, baz]}], [fie, foo, fum])
expand([{{foo, false}, [bar, baz]}], [fie, {foo, false}, fum])
However, no expansion is done in the following call because
{foo, false} shadows foo:
expand([{{foo, true}, [bar, baz]}], [{foo, false}, fie, foo, fum])
Notice that if the original property term is to be preserved in
the result when expanded, it must be included in the expansion
list. The inserted terms are not expanded recursively. If Expan-
sions contains more than one property with the same key, only
the first occurrence is used.
See also normalize/2.
get_all_values(Key, List) -> [term()]
Types:
Key = term()
List = [term()]
Similar to get_value/2, but returns the list of values for all
entries {Key, Value} in List. If no such entry exists, the re-
sult is the empty list.
get_bool(Key, List) -> boolean()
Types:
Key = term()
List = [term()]
Returns the value of a boolean key/value option. If lookup(Key,
List) would yield {Key, true}, this function returns true, oth-
erwise false.
See also get_value/2, lookup/2.
get_keys(List) -> [term()]
Types:
List = [term()]
Returns an unordered list of the keys used in List, not contain-
ing duplicates.
get_value(Key, List) -> term()
Types:
Key = term()
List = [term()]
Equivalent to get_value(Key, List, undefined).
get_value(Key, List, Default) -> term()
Types:
Key = term()
List = [term()]
Default = term()
Returns the value of a simple key/value property in List. If
lookup(Key, List) would yield {Key, Value}, this function re-
turns the corresponding Value, otherwise Default.
See also get_all_values/2, get_bool/2, get_value/2, lookup/2.
is_defined(Key, List) -> boolean()
Types:
Key = term()
List = [term()]
Returns true if List contains at least one entry associated with
Key, otherwise false.
lookup(Key, List) -> none | tuple()
Types:
Key = term()
List = [term()]
Returns the first entry associated with Key in List, if one ex-
ists, otherwise returns none. For an atom A in the list, the tu-
ple {A, true} is the entry associated with A.
See also get_bool/2, get_value/2, lookup_all/2.
lookup_all(Key, List) -> [tuple()]
Types:
Key = term()
List = [term()]
Returns the list of all entries associated with Key in List. If
no such entry exists, the result is the empty list.
See also lookup/2.
normalize(ListIn, Stages) -> ListOut
Types:
ListIn = [term()]
Stages = [Operation]
Operation =
{aliases, Aliases} |
{negations, Negations} |
{expand, Expansions}
Aliases = Negations = [{Key, Key}]
Expansions = [{Property :: property(), Expansion ::
[term()]}]
ListOut = [term()]
Passes ListIn through a sequence of substitution/expansion
stages. For an aliases operation, function substitute_aliases/2
is applied using the specified list of aliases:
* For a negations operation, substitute_negations/2 is applied
using the specified negation list.
* For an expand operation, function expand/2 is applied using
the specified list of expansions.
The final result is automatically compacted (compare compact/1).
Typically you want to substitute negations first, then aliases,
then perform one or more expansions (sometimes you want to pre-
expand particular entries before doing the main expansion). You
might want to substitute negations and/or aliases repeatedly, to
allow such forms in the right-hand side of aliases and expansion
lists.
See also substitute_negations/2.
property(PropertyIn) -> PropertyOut
Types:
PropertyIn = PropertyOut = property()
Creates a normal form (minimal) representation of a property. If
PropertyIn is {Key, true}, where Key is an atom, Key is re-
turned, otherwise the whole term PropertyIn is returned.
See also property/2.
property(Key, Value) -> Property
Types:
Key = Value = term()
Property = atom() | {term(), term()}
Creates a normal form (minimal) representation of a simple
key/value property. Returns Key if Value is true and Key is an
atom, otherwise a tuple {Key, Value} is returned.
See also property/1.
split(List, Keys) -> {Lists, Rest}
Types:
List = Keys = [term()]
Lists = [[term()]]
Rest = [term()]
Partitions List into a list of sublists and a remainder. Lists
contains one sublist for each key in Keys, in the corresponding
order. The relative order of the elements in each sublist is
preserved from the original List. Rest contains the elements in
List that are not associated with any of the specified keys,
also with their original relative order preserved.
Example:
split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c])
returns:
{[[a], [{b, 5}, b],[{c, 2}, {c, 3, 4}]], [{e, 1}, d]}
substitute_aliases(Aliases, ListIn) -> ListOut
Types:
Aliases = [{Key, Key}]
Key = term()
ListIn = ListOut = [term()]
Substitutes keys of properties. For each entry in ListIn, if it
is associated with some key K1 such that {K1, K2} occurs in
Aliases, the key of the entry is changed to K2. If the same K1
occurs more than once in Aliases, only the first occurrence is
used.
For example, substitute_aliases([{color, colour}], L) replaces
all tuples {color, ...} in L with {colour, ...}, and all atoms
color with colour.
See also normalize/2, substitute_negations/2.
substitute_negations(Negations, ListIn) -> ListOut
Types:
Negations = [{Key1, Key2}]
Key1 = Key2 = term()
ListIn = ListOut = [term()]
Substitutes keys of boolean-valued properties and simultaneously
negates their values. For each entry in ListIn, if it is associ-
ated with some key K1 such that {K1, K2} occurs in Negations: if
the entry was {K1, true}, it is replaced with {K2, false}, oth-
erwise with K2, thus changing the name of the option and simul-
taneously negating the value specified by get_bool(Key, ListIn).
If the same K1 occurs more than once in Negations, only the
first occurrence is used.
For example, substitute_negations([{no_foo, foo}], L) replaces
any atom no_foo or tuple {no_foo, true} in L with {foo, false},
and any other tuple {no_foo, ...} with foo.
See also get_bool/2, normalize/2, substitute_aliases/2.
unfold(ListIn) -> ListOut
Types:
ListIn = ListOut = [term()]
Unfolds all occurrences of atoms in ListIn to tuples {Atom,
true}.
Ericsson AB stdlib 3.13 proplists(3erl)