(def ones (prepend 1 ones))

(def (add x y) (+ x y))

(def (map f lst)
  (if (null? lst)
      (null)
      (prepend (f (head lst))
               (map f (tail lst)))))

(def (map2 f lst1 lst2)
  (if (|| (null? lst1) (null? lst2))
      (null)
      (prepend (f (head lst1) (head lst2))
               (map2 f (tail lst1) (tail lst2)))))

(def (prefix n lst)
  (if (= n 0)
      (null)
      (prepend (head lst)
               (prefix (- n 1) (tail lst)))))

(def ints1 (prepend 0 (map (add 1) ints1)))

(def (ints-from n) (prepend n (ints-from (+ n 1))))

(def ints2 (ints-from 0))

(def fibs (prepend 0 (prepend 1 (map2 add fibs (tail fibs)))))

