From 91d8a981fb9337017386e8a6bea349b3d3c4b33f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 22 May 2015 01:16:52 -0400 Subject: [PATCH] Added (list-insert!) --- scheme/cyclone.scm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/scheme/cyclone.scm b/scheme/cyclone.scm index 44e0da36..6b8cf6ff 100644 --- a/scheme/cyclone.scm +++ b/scheme/cyclone.scm @@ -46,3 +46,17 @@ (new-tail (recur (delete x tail)))) (if (eq? tail new-tail) lis (cons x new-tail))))) (recur lis)) + +;; Insert obj at index k of list, increasing length of list by one. +(define (list-insert! lis k obj) + (cond + ((null? lis) (error "list-insert, lis cannot be null")) + ((and (> k 0) (null? (cdr lis))) + (set-cdr! lis (cons obj '()))) + ((zero? k) + (let ((old-car (car lis))) + (set-car! lis obj) + (set-cdr! lis (cons old-car (cdr lis))))) + (else + (list-insert! (cdr lis) (- k 1) obj)))) +