fork download
  1. ; multiplicative persistance
  2.  
  3. (define (digits n . args)
  4. (let ((b (if (null? args) 10 (car args))))
  5. (let loop ((n n) (d '()))
  6. (if (zero? n) d
  7. (loop (quotient n b)
  8. (cons (modulo n b) d))))))
  9.  
  10. (define (uniq-c eql? xs)
  11. (if (null? xs) xs
  12. (let loop ((xs (cdr xs)) (prev (car xs)) (k 1) (result '()))
  13. (cond ((null? xs) (reverse (cons (cons prev k) result)))
  14. ((eql? (car xs) prev) (loop (cdr xs) prev (+ k 1) result))
  15. (else (loop (cdr xs) (car xs) 1 (cons (cons prev k) result)))))))
  16.  
  17. (define (per n)
  18. (let loop ((n n) (xs (list)))
  19. (if (< n 10)
  20. (cons n xs)
  21. (loop (apply * (digits n))
  22. (cons n xs)))))
  23.  
  24. (display (per 327)) (newline)
Success #stdin #stdout 0.01s 50224KB
stdin
Standard input is empty
stdout
(8 42 327)