<div dir="ltr">I am trying to build the following indexing function:<div><br></div><div>;list-of-lists beginning-index-number -> list-of-lists</div><div>;The purpose of this function is to convert one list into another list of incremental numbers, while at the same time, maintaining the structure of the original list. To basically number each point/node in a given list, and return the new numbered list in the same form as the original.</div>
<div><div><br></div><div>Here is what I have so far which works in some instances, but not in others:</div></div><div><br></div><div>(define (index-s-exp s-exp index)</div><div>  (cond [(empty? s-exp) empty]</div><div>           [(atom? (first s-exp))</div>
<div>            (cons index </div><div>                     (index-s-exp (rest s-exp) (add1 index)))]</div><div>           [else </div><div>            (cons (index-s-exp (first s-exp) index)</div><div>                     (index-s-exp (rest s-exp) (add1 index)))])) </div>
<div><br></div><div><div><div><br></div><div>>(index-s-exp '(+ .3 (- .1 x))  1)</div></div><div><div>'(1 2 (3 4 5))  </div><div>this works (I think because the redex is always in tail-position and therefore matches Racket's evaluation scheme)<br>
</div></div><div><br></div><div><div>>(index-s-exp '(+ (- .1 .2) .3)  1)</div><div>'(1 (2 3 4) 3) </div><div>This doesn't work, desired result is '(1 (2 3 4) 5)</div></div><div><br></div><div>I was wondering how I might be able to modify this function so that it works in both cases, as well as if there are any built-in functions that I can take advantage of to make this function cleaner?</div>
<div><br></div><div>Thanks,</div><div>-- <br></div>Rian</div></div>