(begin 
  (define counted-member (counter-maker member)) 
  (define counted-cons (counter-maker cons)) 
  (counted-member 'count 
		  (counted-cons 'I 
				(counted-cons 'can 
					      (counted-cons 'count 
							    (counted-cons 'this! 
									  (counted-cons 
									   (counted-cons 'count)
									   '())))))))
(begin 
  (define counted-member (counter-maker member)) 
  (define counted-cons (counter-maker cons)) 
  (counted-member 'count 
		  (counted-cons 'I 
				(counted-cons 'can 
					      (counted-cons 'count 
							    (counted-cons 'this! '()))))) 
  (counted-member 'count) )
(begin 
  (define counted-member (counter-maker member)) 
  (define counted-cons (counter-maker cons)) 
  (counted-member 'count 
		  (counted-cons 'I 
				(counted-cons 'can 
					      (counted-cons 'count 
							    (counted-cons 'this! '
									  ()))))) 
  (counted-member 'count) 
  (counted-cons (counted-member 'count) (counted-cons 'count)) )
(begin 
  (define counted-member (counter-maker member)) 
  (define counted-cons (counter-maker cons)) 
  (counted-member 'count 
		  (counted-cons 'I 
				(counted-cons 'can 
					      (counted-cons 'count 
							    (counted-cons 'this! '()))))) 
  (counted-member 'count) 
  (counted-cons (counted-member 'count) 
		(counted-cons 'count)) 
  (counted-cons 'count) )
(begin 
  (define fact (lambda (n) 
		 (if (zero? n) 1 
		     (* n (fact (- n 1)))))) 
  (define counted-fact (counter-maker fact)) 
  (define fact-list 
    (map counted-fact '(1 2 3 4 5 6))) 
  (list fact-list (counted-fact 'count)))

(eval-one-exp 
 '(let ([x (vector 1) ] 
	[y 5]) 
    (let loop () 
      (when (> y 2) 
	(vector-set! x 0 (+ (vector-ref x 0) (* y (+ 1 y))))
	(set! y (- y 1)) 
	(loop))) 
    x))
(eval-one-exp 
 '(let ([x (vector 1) ] [y 5]) 
    (let loop () 
      (unless (< y 3) 
	(vector-set! x 0 (+ (vector-ref x 0) (* y (+ 1 y)))) 
	(set! y (- y 1)) 
	(loop))) 
    x))
(eval-one-exp 
 '(let ([x (vector 1) ] [y 5]) 
    (while (< (vector-ref x 0) 300) 
	   (let loop () 
	     (when (> y 2) 
	       (vector-set! x 0 (+ (vector-ref x 0) (* y (+ 1 y)))) 
	       (set! y (- y 1)) 
	       (loop))) 
	   (set! y 5)) 
    x))
(eval-one-exp 
 '(let ([x (vector 1) ] [y 5]) 
    (while (< (vector-ref x 0) 300) 
	   (let loop () 
	     (unless (< y 3) 
	       (vector-set! x 0 (+ (vector-ref x 0) (* y (+ 1 y)))) 
	       (set! y (- y 1)) 
	       (loop))) 
	   (set! y 5)) 
    x))

(eval-one-exp '(+ 5 ((escaper *) 6 7)))
(eval-one-exp '(let ([escape-* (escaper *)]) 
		 (- 6 (escape-* 7 8))))
(eval-one-exp '(procedure? escaper))
(eval-one-exp '(procedure? (escaper +)))
(eval-one-exp '(procedure? ((escaper +) 3 5)))
(eval-one-exp '(let ([escape-* (escaper *)]) 
		 (- 6 (escape-* 4 (escape-* 7 8))))))