<div dir="ltr"><div dir="ltr"><div>The length function from the list module[1] is a lot of code. This simple definition seems sufficient:<br></div><div>    </div><div>    :- pred simple_length(list(_T), int).</div><div>    :- mode simple_length(in, out) is det.</div><div>    :- func simple_length(list(T)) = int.</div><div>    </div><div>    simple_length( [], 0 ).</div><div>    simple_length( [_|Rest], N ) :-</div><div>      simple_length( Rest, N0 ),</div><div>      N = 1 + N0.</div><div>    simple_length(List) = N :-</div><div>      simple_length(List, N).</div><div><br></div><div>Why is it instead this more complex one?</div><div><br></div><div>    :- pred length(list(_T), int).</div><div>    :- mode length(in, out) is det.</div><div>    :- func length(list(T)) = int.</div><div>    </div><div>    length(L, N) :-</div><div>        list.length_acc(L, 0, N).</div><div>    </div><div>    length(Xs) = N :-</div><div>        list.length(Xs, N).</div><div>    </div><div>    :- pred length_acc(list(T), int, int).</div><div>    :- mode length_acc(in, in, out) is det.</div><div>    </div><div>    length_acc([], N, N).</div><div>    length_acc([_ | L1], N0, N) :-</div><div>        N1 = N0 + 1,</div><div>        list.length_acc(L1, N1, N).</div><div><br></div><div>[1] <a href="https://github.com/Mercury-Language/mercury/blob/master/library/list.m">https://github.com/Mercury-Language/mercury/blob/master/library/list.m</a></div><div><br></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Jeff Brown | Jeffrey Benjamin Brown</div><div dir="ltr"><a href="https://msu.edu/~brown202/" style="font-size:12.8px" target="_blank">Website</a>   |   <a href="https://www.facebook.com/mejeff.younotjeff" style="font-size:12.8px" target="_blank">Facebook</a>   |   <a href="https://www.linkedin.com/in/jeffreybenjaminbrown" style="font-size:12.8px" target="_blank">LinkedIn</a><span style="font-size:12.8px">(spammy, so I often miss messages here)   </span><span style="font-size:12.8px">|</span><span style="font-size:12.8px">   </span><a href="https://github.com/jeffreybenjaminbrown" style="font-size:12.8px" target="_blank">Github</a><span style="font-size:12.8px">   </span></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>