<div dir="ltr"><div>My tail recursive implementation of length is like this:</div><div><br></div><div>(define (length2 l)</div><div>  (define (l-iter l count)</div><div>    (if (null? 1) count</div><div>        (l-iter (cdr l) (+ count 1))))</div>
<div>  (l-iter l 0))</div><div><br></div><div>If I call (length2 '(1 2 3)) and step through the code in racket, count increments to 3 but then on the (if (null? l) count line instead of returning out of the function it goes onto the next line (l-iter (cdr l) (+ count l)))) and of course fails at cder of an empty list.</div>
<div><br></div><div>Racket error message is:</div><div><br></div><div> mcdr: contract violation</div><div>  expected: mpair?</div><div>  given: '()</div><div><br></div><div><br></div><div>I am fairly new to scheme.  What am I doing wrong?</div>
<div><br></div><div>Angus</div><div><br></div></div>