01 June 2008

プログラミングGauche

今Gaucheという言語を勉強しています。

プログラミングGauche

プログラミングGauche

研究でLispを使うことになったので、何か本を一冊読んで、体系的に勉強しようと思っていたところ、最近話題のようなので、Gaucheにしてみました。モチベーション維持のため、記録をつけていくことにします。こちらのサイトに正誤表とサンプルプログラムのコード、練習問題の回答があります。

プログラミングGaucheサポートページ

6章 リスト :: プログラミングGauche

5章まではすでに読んでしまったので、今回は6章の「リスト」からです。

リストは、1つめの要素が値、2つめの要素が次のリストを指している、2組のポインタが連なっているデータ形式です。

f:id:cou929_la:20080531222845p:image

リストの最後には空リスト「 '() 」が入っています。

f:id:cou929_la:20080531222846p:image

schemeでは、プログラム全体がリストで表現されています。


car、cdrといった、リストから要素を取り出す手続き。cons、listといった、要素をつなげてリストにする手続きがあります。これらとifなどの条件分岐を組み合わせることで、リストに対してかなり多様な操作を行うことができます。この辺が、「少ないルールで様々な事ができる」というlisp / schemeの思想の表れなのかなと思いました。

リスト表現と再帰は非常に相性が良いものです。逆に言うと、再帰をうまく使いこなせなければ、リストをうまく使うことができません。この6章では、リストの説明もさることながら、再帰という考え方へのイントロダクションの意味合いも強いものでした。Joel Spolskyは、再帰とポインタを理解しているかどうかが、能力の高いプログラマを見分ける良い指標であると言っていましたが、なるほど、再帰を扱うには慣れが必要です。