三日坊主

『アケオメ コトヨロ』

これ女子高生のメールじゃないよ。あっ、当世の女子高生はとっくにスマホに移行してるから、 象形文字通信か。上記、ロートルの新年和文CWメッセージって事で、コトヨロ。

新年と言えば今年の目標を立てて、、、、って、相場が決まっているけど、きっと途中で挫折 する事になるのもある。

おいらの場合、その筆頭は禁酒・禁煙て事になるんだけど、今までの経験からそれは、三日坊主 フラグが必ず立つ事になってる。

ならば、他の目標でフラグが立ちそうなものも、挙げてみよう。

haskell

去年のAdvendを見てて、プチ心が騒いだもの。 Haskell で parser を書くには (初心者編) 初心者って銘打ってるから嵌まってみるのも悪くないな。

でも、その前に、 GHCi debuggerを習得せねば。

命令型言語Haskellってので、そろり そろりと、お近づきになるのも悪くないな。

いずれにしろ、いろいろやりだすと、あのモジュールは何処?なんて、探し回るはめに なりそうなので、 すごいH本を読み終えた人が遭遇する、ある問題から救ってくれる(かもしれない)basic-preludeの紹介 を見て、予防線を張っておこう。

去年で思い出した。Haskellで素数を求めるには一行でいいよ、なんて書いたんで、その証拠を 見つけてきた。

primes1 = 2:f [3,5..] where f (x:xs) = x:f [y | y <- xs, mod y x /= 0]

primes2 = 2:filter f [3,5..]
    where f n = all ((/= 0) . (mod n)) (takeWhile ((<= n) . (^ 2)) primes2)

primes3 = 2:f [3] [3,5..]
    where f (x:xs) ys = let (ps, qs) = span (< x^2) ys
                        in  ps ++ f (xs ++ ps) [z | z <- qs, mod z x /= 0]

豪勢に、3つのやり方を考えた人が居た。で、その使い心地は?

*Main> take 10 primes1
[2,3,5,7,11,13,17,19,23,29]
*Main> take 10 (drop 10 primes2)
[31,37,41,43,47,53,59,61,67,71]
*Main> take 10 (drop 10000 primes3)
[104743,104759,104761,104773,104779,104789,104801,104803,104827,104831]

takeとdropって、headとtailみたいなもんだな。Unix頭でも何とかなりそう。そうそう、 Haskellにはpipeもどきもあるのね。その記号は?

次は素因数分解

factors :: Integer -> [Integer]
factors n = [x | x <- [1..n], n `mod` x == 0]

factorization :: Integer -> [Integer]
factorization 1 = []
factorization x = v : factorization (x `div` v)
  where
    v = (factors x) !! 1
*Main> factors 20
[1,2,4,5,10,20]
*Main> factorization 2013
[3,11,61]

そして、素数に執りつかれた人の記事 Haskellで見るメルセンヌ素数いろいろな素数ここまでやれば、 素数夜曲といい勝負?

で、どうもHaskellってのは素数を計算するしか能が無いよと誤解されるといけないので、 TIM Lab を見て、いろいろ出来る事を知っとこう。あの方の幅広い知見が得られます。

scheme

Haskellが出てくるなら、Schemeだってあるよってのが、こちら。

素数 とか、 素数判定の高速化 とか 素数列を求める とか。 素因数分解 だって、出来るんだ。

で、ちょいと目先を変えて、あの先生も Piの1000桁 に挑戦。

こちらは、Cでごりごりと 円周率を1億桁計算されてます。

scala

何と言っても、私的には今年の三日坊主確定版がこれです。

最初、Java開発で泣かないためのPlay frameworkの基礎知識 を見て、みんなWeb開発で楽したいんだなあ、なんて思っておったの。

根底がScalaって事で、

Scala入門とか Scala早わかり とか、 Let’s Enjoy Scala あたりを見てたのね。

そしたら、 プログラミング Scala sbt辺 に行き当たって 始める sbt してる訳よ。

[sakae@arch ~]$ mkdir hello
[sakae@arch ~]$ cd hello/
[sakae@arch hello]$ echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > hw.scala
[sakae@arch hello]$ sbt
[info] Set current project to default-533f15 (in build file:/home/sakae/hello/)
> run
[info] Updating {file:/home/sakae/hello/}default-533f15...
[info] Resolving org.scala-lang#scala-library;2.9.2 ...
[info] Done updating.
[info] Compiling 1 Scala source to /home/sakae/hello/target/scala-2.9.2/classes...
[info] Running Hi
Hi!
[success] Total time: 10 s, completed 2013/01/02 17:35:36

うん、動いた。

[sakae@arch hello]$ tree
|-- hw.scala
`-- target
    |-- resolution-cache
    |   |-- default
    |   |   `-- default-533f15_2.9.2
    |   |       `-- 0.1-SNAPSHOT
    |   |           |-- resolved.xml.properties
    |   |           `-- resolved.xml.xml
    |   `-- reports
    |       `-- default-default-533f15_2.9.2
    |           |-- compile-internal-resolved.xml
    |           |-- compile-resolved.xml
    |           |-- docs-resolved.xml
    |           |-- ivy-report.css
    |           |-- ivy-report.xsl
    |           |-- optional-resolved.xml
    |           |-- plugin-resolved.xml
    |           |-- pom-resolved.xml
    |           |-- provided-resolved.xml
    |           |-- runtime-internal-resolved.xml
    |           |-- runtime-resolved.xml
    |           |-- sources-resolved.xml
    |           |-- test-internal-resolved.xml
    |           `-- test-resolved.xml
    |-- scala-2.9.2
    |   |-- cache
    |   |   `-- default-533f15
    |   |       |-- compile
    |   |       |   |-- copy-resources
    |   |       |   `-- inc_compile
    |   |       `-- global
    |   |           `-- update
    |   |               |-- inputs
    |   |               `-- output
    |   `-- classes
    |       |-- Hi$.class
    |       `-- Hi.class
    `-- streams
        |-- $global
        |   |-- compilers
        |   |   `-- $global
        |   |       `-- out
        |   |-- ivy-configuration
        |   |   `-- $global
        |   |       `-- out
        |   |-- ivy-sbt
        |   |   `-- $global
        |   |       `-- out
        |   |-- project-descriptors
        |   |   `-- $global
        |   |       `-- out
        |   `-- update
        |       `-- $global
        |           `-- out
        `-- compile
            |-- $global
            |   `-- $global
            |       `-- data
            |-- compile
            |   `-- $global
            |       `-- out
            |-- compile-inputs
            |   `-- $global
            |       `-- out
            |-- copy-resources
            |   `-- $global
            |       `-- out
            `-- run
                `-- $global
                    `-- out

37 directories, 33 files

この大いなる仕掛けは、clojureのあれとそっくりだな。

新年初回なんで、これぐらいにします。