#### 11.3.107 `length/2`

#### Synopsis

`length(`

`?List``, `

`?Integer``)`

`Integer` is the length of `List`. If `List` is
instantiated to a proper list of term, or `Integer` to an integer,
the predicate is determinate.

#### Arguments

`List`- list of term

`Integer`- integer, non-negative

#### 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,_A,_B],
X = [_A,_B] `;`
| ?-

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

simply fails.

#### Backtracking

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

#### Exceptions

`type_error`

`Integer` is not an integer

`domain_error`

`Integer` < 0

#### Examples

| ?- `length([1,2], 2).`
yes
| ?- `length([1,2], 0).`
no
| ?- `length([1,2], X).`
X = 2 `;`
no

#### See Also

ref-lte-acl,
`library(lists)`

.

Send feedback on this subject.