Lambdaカクテル

ウェブアプリケーションエンジニアです.玉石混淆です.

『実践Common Lisp』買った

最近Common Lispをはじめた。昔GaucheというScheme処理系を触った(本当に触った程度だったが)ことがあり、またEmacsを使っている以上Elispを書くこともしばしばであったのでLispにはある程度親近感があったのだが、Common Lispで開発したことはなかったし、あのカッコだらけの言語で本格的な開発に耐えられるということが信じられなかった。そんな中でちらほらと新たなパラダイムの言語を学んだほうがよいという最近の潮流が心をざわつかせはじめたので、Common Lispをやってみようと思った。他に選択肢としてElixir/ErlangとかHaskellとかもあったが、やはりLispの親近感で選んだ。Common Lispは泥臭いというイメージもなんとなく好きだった。

そういうわけでいろいろな処理を書かせて日常に役立ててみたいのだけれど、あまりメジャーな言語でないこともあってインターネットにはあまり情報が充実していないようだ。なにより言語の基本的な機能をよく知らないし、リファレンスとなるような存在がない(当初はCLHSなんてものは知らなかった)。 ひとまずroswellというCommon Lisp処理系/ソフトウェアマネージャなどを使って小さなプログラムを書いていたが、パッケージや例外といった開発に必要な骨組としての役割を果たす要素の挙動が掴めずに困ったりした。あれをやるにはどうしたらよいのだろう、という疑問がいくつも頭をもたげてきて、誰に相談する宛もなくなってしまった。こういった場合には書籍をあたるのが一番だと思い、書籍の購入へと踏み切った。

そういうわけで手頃な入門書を探してみたところ、『実践Common Lisp』が一番自分の要求を満たすようだったため、さっそく購入した。 自分が入門書に求めていたことは以下のとおり。

  • 実践的であること
  • 言語機能をある程度網羅していること
  • 基礎も教えてくれること

なんて贅沢な!とはいえ、インターネットだけから体系的に情報を吸収するのは無理があるので、こういった存在は嬉しい。

さっそく読み始め、今のところ7章まで読んだ(既に環境構築も済ませていたのでスムーズだった)。簡単なマクロも書けるようになった。 入門書としての性質がある本書は、ある程度プログラミングの知識がある読者を想定している。JavaやCとの比較も随所に登場するので、少しは別の言語に触れていたほうがとっつきやすいと思う。

Tips集をはじめました

学習したことがらをまとめておくページを作りました。Org-modeで作成しています。これからちょこちょこ追加していきたい。

www.3qe.us

ちょっと読んだ感想

本を構成するページの材質が良くて読みやすい。つるつるしている。開きっぱなしにすることが多いので書見台を使って読みながらコードを評価している。

実践の名に恥じず、すぐにリスト処理を始め、ファイル入出力なども行うので、熱が醒めてしまうことがない。本当に実践的だ。自分は飽きっぽいので入門書をすぐ投げてしまうのだが、この本は読み続けられている。なによりCommon Lispは書いていて楽しい。EmacsにはSLIMEという優秀なCommon LispのREPLが用意されているのでスムーズにコードを評価することができる。

知らなかったこと

  • コメントの作法(セミコロンをいくつ置くのか)
  • defvardefparameterの違い
  • SLIMEで使えるいくつかのショートカット
    • C-c C-z (REPLにスイッチする)
    • C-c C-l (ファイルをロードさせる)
    • C-c C-c (ポイントしている定義を読み込ませる)
  • #'function と等価になること
  • ダイナミック変数の振舞い

できるようになっこと

  • roswellを使ったアプリケーションの作成
  • すばやい評価(サクサク開発)

知りたいこと

  • コンディションシステム

がんばるぞい

インターネット上のCommon Lisp情報は充分とはいえないので、自分が発信者になって役に立てたら嬉しいな~。

実践Common Lisp

実践Common Lisp