-
-
Save tnoda/4259078 to your computer and use it in GitHub Desktop.
(ns tnoda.projecteuler.problem-5 | |
(:import org.apache.commons.math.util.MathUtils) ; [org.apache.commons/commons-math "2.2"] | |
(:use clojure.test)) | |
(defn- solver* | |
[n] | |
(reduce (fn [^long x ^long y] (MathUtils/lcm x y)) (range 1 (inc n)))) | |
(def solver (partial solver* 20)) | |
(is (= 2520 (solver* 10))) |
1.2までは、いろいろな有用なライブラリがまとまった、clojure-contrib っていうのを使ってますが、1.3で分解されました。最近あまり参照しなくなりましたが、そのとき、いろいろ混乱して、みんなが「あれはどこにいったーーー」って騒いでいたので、こんなページが作られています。
http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
どんなライブラリがあるかについての情報元としても使えますね。
mathは、上で指摘のとおりnumeric-towerに行ってます。
clojure.contrib.math
Migrated to clojure.math.numeric-tower - lead Mark Engelberg.
人のをちゃんと読んでなくて、かぶってしまった。 すみません。
gcdはnumeric-towerにありますね。
primesなんてあったんですねぇ。調べてみると、ここにありました。 このlazy-seqsライブラリは、継続されなかったみたいですね。 これくらい自分で作れってことでしょうか。
型ヒントは普段使わないですが、よくよく考えると、リフレクションを使用して型を判別するのって結構コストがかかりますね。
Project Euler だと型ヒントの恩恵を受ける機会が多そうなので、次の問題あたりで試してみます。
@kohyama @ypsilon-takai
おお、clojure.contrib は 1.3 からそれぞれ独立したライブラリとしてメンテナンスされるようになっていたのですね。全く知らなかったです。
リンク先の情報、とても助かります。
Apache Commons のような既存の Java ライブラリを使ってコーディングの量を減らせるのも,Clojure の長所の一つだと考えています.Maven リポジトリと Leiningen が無ければ Clojure 使っていなかったかもしれないくらい,便利です.
Maven リポジトリ + Leininge で、既存ライブラリを手軽に使えているというのは、ぼくも強く感じています。また、Clojars を使えば、自作ライブラリを公開するのも簡単です。
*warn-on-reflection*
ぼくも試してみます。
clojure.math.numeric-tower というものを使ったことがあります(lcm 関数があるw)。