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