読者です 読者をやめる 読者になる 読者になる

kitak.blog

Kみたいなエンジニアになりたいブログ

Problem1(Schemeで)

ProjectEulerというプログラムで解く数学の問題集があるのですが、久しぶりにやってみます。
この前はPythonでやっていたんですが、関数型言語に慣れるということで最初からSchemeHaskellを使って解いていこうと思います。
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で書いたプログラムなので、おかしいところもあるかもしれません。ツッコミがあったら、コメントお願いします。