[] is the empty list; [a, 2+2, [5]] is the
list containing the three elements a, 2+2,
and [5]. [Head | Tail] is the list whose
first element is Head and whose tail (list of
remaining elements) is Tail. [a, X, c |
Tail] is the list whose first three elements are
a, X, and c, and whose
remaining elements are given by the list Tail. Only one
term may follow the ``|'': [a | X, Y] and
[a | X | Y] are syntactic nonsense.
Unification can be performed on lists:
In most (but not all) Prolog systems, the list notation is syntactic
sugar for the '.' functor, with the equivalence: [a, b, c] = [Head | Tail]. /* a = Head, [b, c] = Tail. */
[a, b] = [A, B | T]. /* a = A, b = B, [] = Tail. */
[a, B | C] = [X | Y]. /* a = X, [B | C] = Y. */
'.'(Head, Tail)
= [Head | Tail].
Two useful predicates are member/2, which succeeds when
its first argument is a member of the list that is its second
argument, and append/3, which is true when the third
argument is the list formed by appending the first two lists.
Neither is predefined. Definitions are:
The operator `` member(A, [A | _]).
member(A, [_ | B]) :- member(A, B).
append([A | B], C, [A | D]) :- append(B, C, D).
append([], A, A).
=..'', pronounced ``univ,'' succeeds when
its left argument is a structure and its right argument is the
corresponding list [Functor | Args].
Example: mother(M, bill) =.. [mother, M, bill].
A double-quoted character string is syntactic sugar for a list of the ASCII codes for those characters.
Example: "abc" = [97,98,99].
The predicate name/2 succeeds if its first argument is
the atom formed from the string that is its second argument.
Example: name(abc, "abc").
![]() |
![]() |
![]() |