length/2length(-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.
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.
If both List and Integer are variables, the system will backtrack, generating lists of increasing length whose elements are anonymous variables.
type_error
| ?- length([1,2], 2).
yes
| ?- length([1,2], 0).
no
| ?- length([1,2], X).
X = 2 ;
no