[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/MACVZOQz    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Jul 14:
; happy numbers

(define (sum xs) (apply + xs))

(define (square x) (* x x))

(define (digits n . args)
  (let ((b (if (null? args) 10 (car args))))
    (let loop ((n n) (d '()))
      (if (zero? n) d
          (loop (quotient n b)
                (cons (modulo n b) d))))))

(define (happy? n)
  (let loop ((n n) (ns '()))
    (cond ((= n 1) #t)
          ((member n ns) #f)
          (else (loop (sum (map square (digits n)))
                      (cons n ns))))))

; display first eight happy numbers
(display "happy numbers:")
(let loop ((n 8) (i 1))
  (cond ((zero? n) (newline))
        ((happy? i)
          (display " ")
          (display i)
          (loop (- n 1) (+ i 1)))
        (else (loop n (+ i 1)))))


Output:
1
happy numbers: 1 7 10 13 19 23 28 31


Create a new paste based on this one


Comments: