its shrinking added by anandamide on Fri May 6 15:33:15 2016

output:
|#     #       |
|  #           |
|    #         |
|  # # #       |
|              |
|              |
|              |
|            |
|  # #       |
|      #     |
|  # # #     |
|    #       |
|            |

Error: (car) bad argument type: ()
.....


code:

(let*
    ((board
      '((1 0 0 1 0 0 0)
	(0 1 0 0 0 0 0)
	(0 0 1 0 0 0 0)
	(0 1 1 1 0 0 0)
	(0 0 0 0 0 0 0)
	(0 0 0 0 0 0 0)
	(0 0 0 0 0 0 0)))
     
     (temp '())
     
     (size (length (car board)))
     
     (cell-index
      (lambda (i j)
	(list-ref (list-ref board j) i)))
     
     (printboard ;displays the board and calls the calling continuation
      (lambda (cc)
	(let loop ((cc cc))
	  (display (string-join
		    (map (lambda (line)
			   (string-join
			    `("|",@(map (lambda (cell)
					  (cond ((eq? cell 0) "  ")
						((eq? cell 1) "# ")
						(else (error "bad cell data" cell))))
					line) "|\n")""))
			 board)
		    ""))
	  (loop (call/cc cc)))))
     
     (alive-neighbors ;calculates the number of neighboring cells that are alive
      (lambda (i j)
	(let* ((coords (filter
			(lambda (point)
			 (not (or (< (car point) 0)
				  (< (cadr point) 0)
				  (> (cadr point) size)
				  (> (car point) size))))
			`((,(- i 1) ,(- j 1))
			  (,(- i 1) ,j)
			  (,(- i 1) ,(+ j 1))
			  (,i ,(- j 1))
			  (,i ,(+ j 1))
			  (,(+ i 1) ,(- j 1))
			  (,(+ i 1) ,j)
			 (,(+ i 1) ,(+ j 1)))))
	       (cells (map (lambda (point)
			     (cell-index (car point) (cadr point)))
			   coords)))
	  (apply + cells))))
     
     (update ;will eventually set! board to updated version
      (lambda (cc)
	(let loop ((cc cc))
	  (set! board
		(let loop-i ((i 0) (t-board '()))
		  (if (< i (- size 1))
		      (loop-i (+ i 1)
			      (cons (let loop-j ((j 0) (line '()))
				      (if (< j (- size 1))
					  (loop-j (+ j 1)
						  (cons ((lambda (x)
							   (cond ((< x 2)
								  0)
								 ((eq? x 2)
								  (cell-index j i))
								 ((eq? x 3)
								  1)
								 ((> x 3)
								  0)))
							 (alive-neighbors j i))
							line))
					  (reverse line)))
				    t-board))
		      (reverse t-board))))
	  (loop (call/cc cc))))))

  (define p (call/cc printboard))
  (define u (call/cc update))
  (set! p (call/cc p))
  (set! u (call/cc u)))