problem 1

私の周辺で流行っている About - Project Euler。掲載されている数学の問題をひたすら解いていくというものですが どこまでいけるか分かりませんが gauche で挑戦してみました。

(3 または 5 の倍数であり) かつ 1000 未満である数の合計を求めるという問題

(define (p1 n)
  (define (p1-iter n)
    (cond ((= n 0) 0)
          (else (+ (if (or (= 0 (modulo n 3))
                           (= 0 (modulo n 5))) n 0)
                   (p1-iter (- n 1))))))
  (p1-iter (- n 1)))

(print (p1 1000))

2008/07/07 00:14 追記

これでいい。並べて書くと成長したと感じる。

(define (p1)
  (apply + (filter (lambda (x) (or (= 0 (modulo x 3))
                                   (= 0 (modulo x 5))))
                   (iota 1000 1))))

(display (p1))