Skip to content

sequences

; List
(define mylist (list 1 2 3 4))

(car mylist) ;Value: 1
(cdr mylist) ;Value 2: (2 3 4)

(cadr mylist) ;Value: 2

; Implementation of `list-ref`
(define (list-ref items n)
    (if (= n 0)
        (car items)
        (list-ref (cdr items) (- n 1))))

(define squares (list 1 4 9 16 25))
(list-ref squares 3) ;Value: 16

; Length of a list
(define (length items)
    (if (null? items)
        0
        (+ 1 (length (cdr items)))))

(define odds (list 1 3 5 7))
(length odds) ;Value: 4

; Iterative length
(define (length items)
    (define (iter a count)
        (if (null? a)
            count
            (iter (cdr a) (+ 1 count))))
    (iter items 0))
(define evens (list 2 4 6 8))
(length evens) ;Value: 4

; Append procedure
(define (append list1 list2)
    (if (null? list1)
        list2
        (cons (car list1) (append (cdr list1) list2))))

(append odds evens) ;(1 3 5 7 2 4 6 8)