2009/11/21

Clojure de Fibonacci number

なんとなく試してみた。

 ~/workspace/sketch
% time ./clojure.clj
3524578
./clojure.clj  2.44s user 0.11s system 98% cpu 2.588 total

 ~/workspace/sketch
% time ./python.py
3524578
./python.py  2.97s user 0.02s system 98% cpu 3.025 total

へー。 それだけなんだけど。

#!/usr/bin/env clj
(defn fib [n]
  (if (<= n 2) 
    1 
    (+ (fib (- n 1)) (fib (- n 2)))))

(println (fib 33))
#!/usr/bin/env python
# encoding: utf-8

from __future__ import print_function

def fib(n):
    if n <= 2:
        return 1
    return fib(n - 1) + fib(n - 2)

print(fib(33))

追記

(def fibs (lazy-cat [0 1] (map + fibs (rest fibs))))
(println (take 33 fibs))
clojureでフィボナッチ

ほへー。よくわかりませんが早い…。

% time ./clojure.clj
(0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121
393 196418 317811 514229 832040 1346269 2178309)
./clojure.clj  1.02s user 0.11s system 94% cpu 1.200 total

2009/11/14

Clojure de FizzBuzz

ちょっとだけお勉強。覚えること多いし、それ以上に考え方変えてかなきゃいけないから大変だなぁ。

#!/usr/bin/env clj

; FizzBuzz

(println (map (fn [x]
                (cond
                  (= (rem x 15) 0) 'FizzBuzz
                  (= (rem x 5) 0) 'Buzz
                  (= (rem x 3) 0) 'Fizz
                  :else x))
           (range 1 101)))

Lisp のインデントわからない…フォーマッタあるよね多分。

完全に手続き脳だからいちいち (println x) したくなるけど、そんなの後でやればいい、と。

2009/11/11

Blogger での syntax highlight

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Hello, world!!\n");
    return 0;
}

対応言語少ないのが残念かな。

Clojure: first step

なんにでも飛びつく悪い癖なんだけれど、いまだに Lisp が腑に落ちないというか理解できてないってのもあってとりあえず処理系だけはインストールしてたんだよね。 Mac なら MacPorts がやっぱり楽。

% sudo port -v install clojure +rlwrap

+readline のオプションもあったけど +rlwrap でインストールした。たまたま検索して開いたページではこっちの方がおすすめって書かれてたしこれでよかった。

で、起動するのに簡単なシェルスクリプト書いた方がいいよっていうから、それに倣って ~/bin/clj を作ったのね。内容は以下の通り。

#!/usr/bin/env bash
java -cp clojure/clojure.jar clojure.lang.Repl

インストール直後はこれで問題なく動いてたんだけど、久々に起動しようとしたらエラー出て、なんでかなーって調べたら /opt/local/bin/clj にすでにちゃんとしたスクリプトがインストールされてて、自分の書いたやつが classpath の関係でダメになってたってだけだった。

そんな訳で、MacPorts でインストールしたらすぐそのまま Clojure で遊んでればよろしい、ということがわかりました!

何度目の仕切り直しかわからないけど

別にはてなに不満があるわけじゃないんだけど、いろいろと外部のブログサービスに手をつけては放置しまくってる。あんまり書くことないのにね…。

実際退職してからびっくりするほどモチベーション上がらないし、やる余裕もなくなってきてて、これじゃーダメだって思って入るんだけれど、どうにもならない。

……なんだけど、やっぱりプログラミングとかネットに対する興味は無くならないし、またプログラマとして仕事をしたいって気持ちは持ち続けているから、月に2回はプログラミングネタで更新しようという目標を立てました。少ない?

実際苦し紛れなネタになることは目に見えてるけど、やらないよりはマシだもんね。