人気ブログランキング | 話題のタグを見る

FizzBuzz とクラスタリング

先月流行した FizzBuzz 問題。
私もへっぽこながら挑戦してみたわけですが。

もう大体回答も出揃った頃だろうと思い、つらつらと検索しながら回答を見る。
プログラムの内容もさることながら、
いろんな言語で挑戦する人がいて、
そのバラエティ豊かなことが非常に面白かった。
awk や sed な人とか、cobol な人とか、fortran な人とか、
アセンブラな人までいたよ。
すごいなぁ、みんな(笑)
Erlang とか haskell とかが散見されるのだが、流行ってるのん?
意外に Ruby が多くて、PHP が少ないとか。

言語の傾向からクラスタ分析できる?


で、ふと思いついたのだが、
言語によって、使われる言葉や文言に傾向がある。
C だったら printf とか、java だったら System.out.print とか。
lisp だったら、ひょっとしたら lambda なんて多いかもしんない。
てことは、結果をクラスタ分析したら、
言語ごとにクラスタが分かれるんじゃね?と思いついた。
われながら良いアイディア。

早速、yahoo のまとめ検索を使ってみる。
「Fizz Buzz」の検索結果、上位100件をグループごとにまとめて表示
記事をまとめる度合い:強

…結果、全然ダメ(^^;;
うーん、ある意味、優秀だな、yahoo。
print とか out とか、そういうのはノイズになることが多いので、
クラスタの要素としてはカウントされないのかも。
でも if とか else とか for なんかは出てるんだよね。
こっちこそ除外すべき単語じゃないかと思うんだが、
英語に弱いのか、日本語 yahoo。

老舗なvivsimo(英語)も試してみた。
これもある意味優秀で、
クラスタの要素が、読んでもそれなりに良くわかるようにできている。
クラスタの要素は、だいたい1単語で出てくるので、
「数字」とか「リスト」とか、
気持ちはわかるけど、それだけではどんなクラスタかわからない、というのが多い。
そういう意味では、ちゃんとしたフレーズで出てくるので、わかりやすい。
でも端的にあらわしているかと言えば、ちょっと冗長な感。

そして次に試してみたのが、これ。
clusty
おお、これはなかなか良いぞ。
クラスタを代表する要素として、言語名がキレイに出てますねー。
Python、Ruby、Erlang、Gauche などなど。
Java や C な人は、きっとメジャーだから、
この言語で書いたよ!と宣言しないんだろうな。
だからクラスタの要素に出てこないんだろう。

クラスタ分析なんて、普段全然使わないんだけど、
こういう風に目的を持って使ってみると、結構面白いな。

Lisp脳


途中、偶然見つけたのがこのページ。
「Lisp脳」の謎に迫る - Schemeプログラマの発想(Gaucheプログラミング)

手続き的な発想では、毎回特殊な処理を行いそれを繰り返す
という発想でプログラミングしていました。
Schemeプログラマはそうは考えません。
データからデータへの変換を考えれば良く、出力は後からどうにでもなる、
と考えています。

これを読んで爆笑。
FizzBuzz を解いたとき、
最初は perl で書いて、後から lisp で書いた。
振り返ってソースを見てみると、私の perl は lisp 脳である。
確かに、いつも仕事で書いているときでも、
データの加工の方に頭が行っていて、
「出力なんてどうにでもなる」って思ってるな。
あはははは。

「プリントせよ」という文を読んだからといって
素直に「印字せよ」とは考えません

あるある。
最後に評価したものが返却値になるから、
敢えて return なんて使わない。
返却値は勝手に標準出力に出るし。
あれ?「評価」とかいう言葉が、既に lisp かい?

三歳じゃなかったけど、三つ子の魂って怖いねー。
by xiaoxia | 2007-06-05 18:54 | コンピュータ関係
<< 漫画バトン MS Office に使える技たち >>