#### Synopsis

`length(`-List, +Integer`)`

`length(`*List, *Integer`)`

Integer is the length of List. If List is instantiated to a proper list, the predicate is determinate, also when Integer is var.

#### Arguments

List list
a list
Integer integer
non-negative integer

#### Description

If List is a list of indefinite length (that is, either a variable or of the form `[...|X]`) and if Integer is bound to an integer, then List is made to be a list of length Integer with unique variables used to "pad" the list. If List cannot be made into a list of length Integer, the call fails.

```     | ?-  List = [a,b|X], length(List, 4).

List = [a,b,_3473,_3475],
X = [_3473,_3475] ;

| ?-
```

If Integer is unbound, then it is unified with all possible lengths for the list List.

If List is bound, and is not a list, `length/2` simply fails.

#### Backtracking

If both List and Integer are variables, the system will backtrack, generating lists of increasing length whose elements are anonymous variables.

#### Exceptions

`type_error`
Integer integer

#### Examples

```
| ?- length([1,2], 2).

yes
| ?- length([1,2], 0).

no
| ?- length([1,2], X).

X = 2 ;

no
```