(define-syntax lazy-cons
  (syntax-rules ()
    ((_ head tail) (cons (delay head) (delay tail)))))

(define (lazy-head ll)
  (force (car ll)))

(define (lazy-tail ll)
  (force (cdr ll)))

(define-syntax lazy-list
  (syntax-rules ()
    ((_ x)      (lazy-cons x '()))
    ((_ x . xs) (lazy-cons x (lazy-list . xs)))))

;;; ----------------------------------------------------------------

(define ll (lazy-list (print 1) (print 2) (print 3)))

(lazy-head (lazy-tail ll))