; prime palindrome

(define (palindrome? n)
  (define (rev-digits n)
    (let loop ((n n) (sum 0))
      (if (zero? n) sum
        (loop (quotient n 10)
              (+ (* 10 sum) (modulo n 10))))))
  (= n (rev-digits n)))

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

(define (pp k)
  (let loop ((k k) (n 2) (ns (list)))
    (if (zero? k) (reverse ns)
      (if (and (prime? n) (palindrome? n))
          (loop (- k 1) (+ n 1) (cons n ns))
          (loop k (+ n 1) ns)))))

(display (pp 100)) (newline)