fork(1) download
  1. ; eureka
  2.  
  3. (define (range . args)
  4. (case (length args)
  5. ((1) (range 0 (car args) (if (negative? (car args)) -1 1)))
  6. ((2) (range (car args) (cadr args) (if (< (car args) (cadr args)) 1 -1)))
  7. ((3) (let ((le? (if (negative? (caddr args)) >= <=)))
  8. (let loop ((x(car args)) (xs '()))
  9. (if (le? (cadr args) x)
  10. (reverse xs)
  11. (loop (+ x (caddr args)) (cons x xs))))))
  12. (else (error 'range "unrecognized arguments"))))
  13.  
  14. (define (filter pred? xs)
  15. (let loop ((xs xs) (ys '()))
  16. (cond ((null? xs) (reverse ys))
  17. ((pred? (car xs))
  18. (loop (cdr xs) (cons (car xs) ys)))
  19. (else (loop (cdr xs) ys)))))
  20.  
  21. (define (digits n . args)
  22. (let ((b (if (null? args) 10 (car args))))
  23. (let loop ((n n) (d '()))
  24. (if (zero? n) d
  25. (loop (quotient n b)
  26. (cons (modulo n b) d))))))
  27.  
  28. (define (eureka? n)
  29. (do ((ds (digits n) (cdr ds))
  30. (e 1 (+ e 1))
  31. (x 0 (+ x (expt (car ds) e))))
  32. ((null? ds) (= x n))))
  33.  
  34. (display (filter eureka? (range 10000))) (newline)
Success #stdin #stdout 0.11s 8968KB
stdin
Standard input is empty
stdout
(0 1 2 3 4 5 6 7 8 9 89 135 175 518 598 1306 1676 2427)