; goldbach's other conjecture

(define (prime? n)
  (if (even? n) #f
    (let loop ((f 3))
      (if (< n (* f f)) #t
        (if (zero? (modulo n f)) #f
          (loop (+ f 2)))))))

(define (goldbach n)
  (let loop ((dsq 0) (k 1))
    (if (< n dsq) (list)
      (if (prime? (- n dsq)) (list (- n dsq) (sqrt (/ dsq 2)))
        (loop (+ dsq k k) (+ k 2))))))

(do ((n 3 (+ n 2))) ((< 10000 n))
    (let ((g (goldbach n)))
      (when (null? g)
        (display n) (newline))))