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

# append(?List1, ?List2, ?List3)

Succeeds if List3 is the result of appending List2 to List1.
?List1
List or variable.
?List2
List or variable.
?List3
List or variable.

## Description

Unifies List3 to the result of appending List2 to List1. On backtracking append/3 gives all possible solutions for List1 and List2, if both are uninstantiated.

The definition of this Prolog library predicate is:

```append([],X,X).
append([X|L1],L2,[X|L3]):-
append(L1,L2,L3).
```
This predicate does not perform any type testing functions.

### Modes and Determinism

• append(+, +, -) is det
• append(-, -, +) is multi

### Fail Conditions

Fails if List3 does not unify with the result of appending List2 to List1.

Yes.

## Examples

```Success:
append([1,2],L2,[1,2,3,4]). (gives L2=[3,4]).
append([1,B],L2,[A,2,3,4]). (gives B=2 L2=[3,4] A=1).
append([1,2],L2,L3).        (gives L2=L2 L3=[1,2|L2]).
append([1],[2,3],L3).     (gives L3=[1,2,3]).

[eclipse]: append(L1,L2,[1,2]), writeln((L1,L2)), fail.
[] , [1, 2]
[1] , [2]
[1, 2] , []
no (more) solution.
Fail:
append(L1,[3],[1,2,3,4]).
append(1,L2,[1,2]).

```