Clojure Exercise: Calculate Perfect Numbers
maurits.wordpress.com
maurits.wordpress.com
perfects = [n | n <- [1..], n == sum (divisors n)]
where
divisors n = [k | k <- [1..(n `div` 2)], n `mod` k == 0] divisors = lambda n: (k for k in range(1, n / 2 + 1) if n % k == 0)
perfects = (n for n in itertools.count(1) if n == sum(divisors(n))) (define (perfect-numbers integers)
(stream-filter perfect?
(stream-cdr integers)))
(define (perfect? n)
(= n (sum-stream (stream-filter (lambda (x) (zero? (remainder n x)))
(stream-range 1 (+ (/ n 2) 1)))))))
Happy Happy Joy Joy! (stream-filter perfect? ... )
or: (stream-filter 'perfect? ...)btw, it Scheme. Compared to Clojure it is clean and readable.
Nice simple lisp intro though.