zurück
;;; ===== 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))))))