;;; ;;; listprocs.ss ;;; UVA CS150 Fall 2005 ;;; ;;; This file contains some useful procedures we have defined for lists. ;;; get-nth evaluates to the nth element in the list (where the first element is element 1) (define (get-nth lst num) (assert (> num 0)) (if (= num 1) (car lst) (get-nth (cdr lst) (- num 1)))) (define (find-element-number lst el) (if (null? lst) (error "Element not found: " el) (if (eq? (car lst) el) 1 (+ 1 (find-element-number (cdr lst) el))))) (define (insertl f lst start) (if (null? lst) start (f (car lst) (insertl f (cdr lst) start)))) (define (filter f lst) (insertl (lambda (el rest) (if (f el) (cons el rest) rest)) lst null)) (define (quicksort cf lst) (if (null? lst) lst (append (quicksort cf (filter (lambda (el) (cf el (car lst))) (cdr lst))) (list (car lst)) (quicksort cf (filter (lambda (el) (not (cf el (car lst)))) (cdr lst)))))) (define (revintsto n) (if (= n 0) null (cons n (revintsto (- n 1))))) (define (intsto n) (reverse (revintsto n)))