All pastes #1195520 Raw Edit

Untitled

public text v1 · immutable
#1195520 ·published 2008-09-06 04:05 UTC
rendered paste body
(defpackage lazy)

(in-package lazy)

(defun lazy-first (l)
  (if
    (eql (first l) :promise) (first (eval (rest l)))
    (first l)))

(defun lazy-rest (l)
  (if
    (eql (first l) :promise) (rest (eval (rest l)))
    (rest l)))

(defun lazy-nth (n l)
  (if
    (= n 0) (lazy-first l)
    (lazy-nth (- n 1) (lazy-rest l))))

(defun integers-from (n)
  `(,n :promise integers-from ,(1+ n)))

(defun fibonacci-from (n m)
  `(,n ,m :promise fibonacci-from ,(+ n m) ,(+ n (* 2 m))))

(defun relatively-prime (n integers)
  (cond
    ((null integers) t)
    ((= (mod n (first integers)) 0) nil)
    (t (relatively-prime n (rest integers)))))

(defun primes-from (n others)
  (if (relatively-prime n others)
      `(,n :promise primes-from ,(1+ n) (quote ,(cons n others)))
      (primes-from (1+ n) others)))