list-insert! pasted by sdegutis on Tue Oct 25 16:59:28 2011
; two versions, first is more efficient methinks (define (list-insert! lst idx val) (if (equal? (length lst) idx) (set-cdr! (list-tail lst (- idx 1)) (list val)) (let ((sublst (list-tail lst idx))) (set-cdr! sublst (cons (car sublst) (cdr sublst))) (set-car! sublst val))) lst) (define (list-with-insertion lst idx val) (if (zero? idx) (cons val (list-with-insertion lst (- idx 1) val)) (if (null? lst) lst (cons (car lst) (list-with-insertion (cdr lst) (- idx 1) val)))))
better version of list-with-insertion pasted by sdegutis on Tue Oct 25 17:16:04 2011
(define (list-with-insertion lst idx val)
(cond
[(zero? idx) (cons val lst)]
[(null? lst) lst]
[else
(cons
(car lst)
(list-with-insertion (cdr lst) (- idx 1) val))]))even better list-with-insertion pasted by sdegutis on Tue Oct 25 18:39:14 2011
(define (list-with-insertion lst idx val)
(cond
[(zero? idx) (cons val lst)]
[(null? lst) lst]
[else
(append
(take lst idx)
(list-with-insertion (drop lst idx) 0 val))]))
final version list-with-insertion i think? pasted by sdegutis on Tue Oct 25 19:05:04 2011
(define (list-with-insertion lst idx val)
(if (zero? idx)
(cons val lst)
(append (take lst idx) (cons val (drop lst idx)))))
now i feel stupid -- obvious version of list-with-insertion added by sdegutis on Tue Oct 25 19:06:41 2011
(define (list-with-insertion lst idx val) (append (take lst idx) (cons val (drop lst idx)))) ; i coulda sworn one of the tests failed with this version... i guess not