Problem1(Schemeで)
ProjectEulerというプログラムで解く数学の問題集があるのですが、久しぶりにやってみます。
この前はPythonでやっていたんですが、関数型言語に慣れるということで最初からSchemeやHaskellを使って解いていこうと思います。
ProjectEulerのサイトは英語ですが、問題を日本語に訳したwikiもあります。
まずはProblem1をSchemeで二通りほどで解いてみました。
(use srfi-1) (define (solve) (apply + (filter (lambda (n) (or (= (modulo n 3) 0) (= (modulo n 5) 0))) (iota 1000)))) (define (main argv) (display (solve)) (newline))
(define (solve n sum) (cond [(= n 0) sum] [(= (modulo n 3) 0) (solve (- n 1) (+ sum n))] [(= (modulo n 5) 0) (solve (- n 1) (+ sum n))] [else (solve (- n 1) sum)])) (define (main argv) (display (solve 999 0)) (newline))
前者の方がスマートですね。久しぶりにSchemeで書いたプログラムなので、おかしいところもあるかもしれません。ツッコミがあったら、コメントお願いします。