GOL pasted by anandamide on Fri May 6 05:59:39 2016

(use srfi-1)
(use srfi-13)

(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
      (lambda (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)
		  ""))))
     
     (alive-neighbors
      (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
      (lambda (cc)
	(set! temp
	      (let loop-i ((i 0) (b '()))
		(if (< i (- size 1))
		    (loop-i (+ i 1) (cons (let loop-j ((j 0) (l '()))
					    (if (< j (- size 1))
						(loop-j (+ j 1) (cons (alive-neighbors i j) l))
						(reverse l))) b))
		    (reverse b))))
	(printf "~A~N" temp))))
  (call/cc printboard)
  (printf "cell (3, 0) has ~A alive neighbors~N" (alive-neighbors 3 0))
  (call/cc update))

output added by anandamide on Fri May 6 06:01:20 2016

|#     #       |
|  #           |
|    #         |
|  # # #       |
|              |
|              |
|              |
cell (3, 0) has 0 alive neighbors
((1 2 2 1 1 0) (2 2 4 2 2 0) (2 3 4 3 3 0) (0 2 3 2 2 0) (1 1 1 1 1 0) (0 0 0 0 0 0))