Stream Lecture Notes

(define findmax
  (lambda (l)
    (if (null? l)
        'no-list
        (if (null? (cdr l))
            (car l)
            (max (car l) (findmax (cdr l)))))))

(define times
  (lambda (n l)
    (if (null? l)
        '()
        (cons (* n (car l)) (times n (cdr l))))))

(define merge
  (lambda (l1 l2)
    (if (null? l1)
        l2
        (if (null? l2)
            l1
            (if (< (car l1) (car l2))
                (cons (car l1) (merge (cdr l1) l2))
                (cons (car l2) (merge (cdr l2) l1)))))))

(define rev
  (lambda (l acc)
    (if (null? l)
        acc
        (rev (cdr l) (cons (car l) acc)))))

(define rev1
  (lambda (l)
    (letrec ((rev (lambda (l^ acc)
                    (if (null? l^)
                        acc
                        (rev (cdr l^) (cons (car l^) acc))))))
       (rev l '()))))

(define succ
  (lambda (n)
    (cons n (succ (+ n 1)))))

'(car (succ 1))

'(car (cdr (succ 1)))

'(car (cdr (cdr (succ 1))))

;; First n tokens in the list l
(define list-eater
  (lambda (l n)
    (if (= n 0)
        '()
        (cons (car l) (list-eater (cdr l) (- n 1))))))

(define succ$
  (lambda (n)
    (cons n (lambda () (succ$ (+ n 1))))))

'(car (succ 1))

'(car ((cdr (succ 1))))

'(car ((cdr ((cdr (succ 1))))))

;; First n tokens in the stream s
(define stream-eater
  (lambda (s n)
    (if (= n 0)
        '()
        (cons (car s) (stream-eater ((cdr s)) (- n 1))))))

(define times$
  (lambda (n s)
    (if (null? s)
        '()
        (cons (* n (car s)) (lambda () (times$ n ((cdr s))))))))

'(stream-eater (times$ 3 (succ$ 1)) 10)

(define merge$
  (lambda (s1 s2)
    (if (null? s1)
        s2
        (if (null? s2)
            s1
            (if (< (car s1) (car s2))
                (cons (car s1) (lambda () (merge$ ((cdr s1)) s2)))
                (cons (car s2) (lambda () (merge$ ((cdr s2)) s1))))))))

'(stream-eater (merge$ (times$ 3 (succ$ 1)) (times$ 5 (succ$ 1))) 10)

(define ham
  (lambda (p)
    (if (null? p)
        '()
        (cons (car p) (lambda () (merge$ (times$ (car p) (ham p)) (ham (cdr p))))))))

'(stream-eater (ham '(3 5 11)) 100)