The predicate is also built in Prolog: length(List,Nr). ?- my_length([a,b,[c,d],e],R). R = 4 ?- my_length([[],[]],R). R = 2 ?- my_length([[[]]],R). R = 1 my_length([],0). my_length([_|T],R):- my_length(T,R1),R is R1 + 1.