;;; ===== Nachfolger ====================================
; Die Nachfolgerfunktion.
(define
(Nachfolger zustand)
(let loop
((index 8)
(akku ()))
(cond
((zero? index) akku)
((member index zustand) (loop (sub1 index) akku))
((diagonal-besetzt? (cons index zustand))
(loop (sub1 index) akku))
(else
(loop (sub1 index) (cons (cons index zustand) akku))))))
;;; ===== diagonal-besetzt? =============================
; Testet die Diagonalen.
(define
(diagonal-besetzt? zustand)
(let loop
((liste (cdr zustand))
(rauf (add1 (car zustand)))
(runter (sub1 (car zustand))))
(cond
((null? liste) #f)
((= rauf (car liste)) #t)
((= runter (car liste)) #t)
(else
(loop (cdr liste) (add1 rauf) (sub1 runter))))))