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-01-15

Lisp初心者がお勧めするLisp入門にお勧めなL-99

| 18:16 | Lisp初心者がお勧めするLisp入門にお勧めなL-99 - わだばLisperになる を含むブックマーク はてなブックマーク - Lisp初心者がお勧めするLisp入門にお勧めなL-99 - わだばLisperになる

ひげぽんさんのところのScheme情報リンク集で取り上げて頂いてからRSSのフィードの登録も急増し、凄い勢いだなあと思っているわけなのですが、何を隠そう私は、完全なるプログラミング初心者かつLisp初心者であり、しかも完全独学で誰に教わったという訳でもないので、何か悪いコードを書いても、コンパイラにしか怒られたことのない、そんな甘えん坊さんな完全趣味プログラマなのです。いや、お恥ずかしい…というか申し訳ない…。

UNIXのワークステーションを好んで使っていたために、シェルスクリプトは日常生活で使う分位は書けますが、Perlも、RubyもSchemeも、JavaもCも入門書の第一章位辺で挫折しました。

そんな私ですが、Lispの括弧と前置記法には全く抵抗がなかったためか、Lispや、Schemeは何度か繰り返してトライしては挫折を繰り返していました。

最初は、Lispに実用性(シェルスクリプトの代替となるもの)を求めていて、日頃身近に使うことにすれば自然にば身に付く筈と安易に考えていたのですが、シェルスクリプトから乗り換えようというには、GaucheやScshは、至極当然ながらあまりにもScheme的で、その表現方法を知らねばならず、またCommon Lispは、それに加えて、UNIX上でスクリプト言語として使うのは、OSを含めた文化の違いで無理ではないにしろ、手軽では無いのでこれまた挫折しました。勿論Lispマシンの上では、Lispが一番簡便なスクリプト言語ですが(笑)

そんなこんなしている去年の今頃、del.icio.usのlispタグのところに「L-99: Ninety-Nine Lisp Problems」が集中的に登録されていたので、ちょっと興味を持って挑戦してみることにしました。

これは、Lispの問題が大体難易度順に並べられた問題集です。L-99といいつつ84問しか無いのですが、元はProlog用に作られたもので、「401 Unauthorized」がオリジナルのサイトです。

この問題集には、リスト操作の問題が沢山でてくるのですが、初心者にも比較的手頃で、割と、次へ次へという感じで進むことができて、そんなこんなしているうちに、それなりにリスト操作も身に付く気がします。

それで、リスト操作が身近になってくると、マクロを書くことも身近になって来ました。結局のところLispの伝統的なマクロは、プログラムというリストを操作して目的の構造を作るということだからかもしれません。

そして、リスト操作/マクロが身近になってくるとLispの制御構造も身近になって来て、なんとなくLispで何かを表現できるようになってくる気がします。(関数型言語としてのLispが身近になるというよりは、リスト操作言語としてのLispが身近になるという感じなのかもしれませんが…。)

それと、L-99には、リスト操作だけでなく、それなりにコンピュータサイエンス的な問題もちりばめられていたりするのも良い感じです。

しかし、L-99には、若干の問題があって、

  1. 解答が全部完成していない
  2. 後半は、P-99からそのまま転載していたりするのでProlog用語そのまま

だったりします。

しかし、元のP-99を参照すればどうにかなるので、まあ大丈夫かなと。

もし自分のように、何年もLisp周辺をずっとぐるぐる回ってはいるんだけど、実際にはLispでプログラムを書くのが身近に感じられず、結局手着かず…という人がいたならば、L-99は良いとっかかりになると思うので個人的にお勧めしたいです。

それで、開発環境ですが、やはり、初心者をサポートすると言う意味でもSLIMEは強力だと思います。

コンパイルして問題があるソースの個所を色付きで教えてくれたり、関数名をガンガン補完してくれたり(例えばppcre:bindをppcre:register-groups-bindまで展開してくれる)してくれるので非常にお勧めです。

…そういう私ですが、66問目ではまってしまい、それ以上進めずにいます(;´Д`)

おまけ

L-99をPerl6で解くという試みもあるようです。