cyclone/examples/game-of-life/example/life.sld
Justin Ethier f0bf9fc1d4 Issue #412 - Handle all cond-expand's
This change allows libraries to expand properly when cond-expand contains multiple sub-expressions. Previously it only worked properly if the sub-expressions were begin's.
2020-09-27 22:12:28 -04:00

73 lines
1.7 KiB
Scheme

(define-library (example life)
(import (except (scheme base) set!)
; (scheme write)
; (example grid)
)
(cond-expand
(cyclone
(import (scheme write))
; ))
; (cond-expand
; (cyclone
(import (example grid))
))
;(cond-expand
; (cyclone
(export life)
;))
(cond-expand
(cyclone
(begin
(define (life-count grid i j)
(define (count i j)
(if (ref grid i j) 1 0))
(+ (count (- i 1) (- j 1))
(count (- i 1) j)
(count (- i 1) (+ j 1))
(count i (- j 1))
(count i (+ j 1))
(count (+ i 1) (- j 1))
(count (+ i 1) j)
(count (+ i 1) (+ j 1))))
)
(begin
(define (life-alive? grid i j)
(case (life-count grid i j)
((3) #t)
((2) (ref grid i j))
(else #f)))
)
)
)
(begin
(define (clear-vt100)
(display
(string
(integer->char #x1B)
#\[
#\H
(integer->char #x1B)
#\[
#\J)))
(define (life-print grid)
(clear-vt100)
(each grid
(lambda (i j v)
(display (if v "*" " "))
(if (= j (- (cols grid) 1))
;(when (= j (- (cols grid) 1))
(newline)))))
(define (life grid iterations)
(do ((i 0 (+ i 1))
(grid0 grid grid1)
(grid1 (make (rows grid) (cols grid))
grid0))
((= i iterations))
(each grid0
(lambda (j k v)
(let ((a (life-alive? grid0 j k)))
(put! grid1 j k a))))
;(set! grid1 j k a))))
(life-print grid1)))))