Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-03-11

繰り返し構文からみる自分のコーディングスタイル

| 01:50 | 繰り返し構文からみる自分のコーディングスタイル - わだばLisperになる を含むブックマーク はてなブックマーク - 繰り返し構文からみる自分のコーディングスタイル - わだばLisperになる

Common Lispせよ、Schemeにせよ繰り返しの構文は豊富に用意されているかと思うのですが、どんな構文を自分は好んで使っているのか、ふと、知りたくなりました。

ということで、DOやMAP、PROG等のめぼしい構文を抜き出して各々の構文の数を勘定するコードをCLで書いてチェック。自分が書いたメモ書きからスクラッチのごみのようなものまで含めて約4万行を対象にしてみました。グラフはGoogleDocsにお任せしました。ほんとはCLで完結させたかったんですが…。

主観的には自分は繰り返しにはDO構文を良く使っていて、LOOPはあまり使ったことがない、と思っているのですが、意外なことにMAPCARを一番多く使っていて、大体同じ位DOを使用。そして使ってない筈のLOOPも普通に使ってました(笑)

最近、LOOPで書く練習をしていて、できるだけLOOPで書くようにしているからかも知れません。PROGが多いのはレトロコンピューティングな趣味が反映されたものだと思われます。

ついでに、SBCL 1.0.15のソースコードも調べてみました。

DOLIST、DO、MAPCARで7割弱。何でもかんでもLOOPだろうと勝手に思っていたので意外でした。

それで調子に乗って古い処理系から最近のCLの処理系まで色々調べてみたのですが、最近の傾向としては、ちょとした違いはありますが、DOLIST、DO、MAPCARの順で6割強を占めるようです。この35年位を通じDOは首位で安定している様子で、LOOPは大体4番手か5番手位。CMUCLでは、LOOPよりPROGが多かったりして何となく処理系の歴史を感じさせます。

また、調べてみてMacLISPのような古い処理系では、DOLISTの代わりにMAPCが好んで使われていたことが分かりました。MAPCは、Schemeで言えば、for-eachで、副作用主目的としたmapです。機能としては、あまりDOLISTと変わらないのですが、Lispマシン時代からDOLISTに取って代わられ始め、現在では殆んど使われなくなってしまいました。

また、LOOPはLispマシンから出て来ただけに、Lispマシンでは今より好んで使われていた様子で、今のCommon Lispの処理系より全体に占める割合は多いようです。これも意外でした。

ちなみに、再帰は、統計を取るのが面倒なので、LABELS位にしています。処理系のソースという性質もあるとは思いますが、眺める限りはLispマシン以前では殆ど使われずCommon Lisp以降から少しずつ増え始めている感じです。

以上、非常に下らないですが、統計を取ると存外色んなことが分かって来たりするもんだと思いました。

…分かってくると言っても、全く本質的でない事項だとは思いますが(笑)