萌えハッカーニュースリーダー

2025/07/09 23:32 Notes on Graham's ANSI Common Lisp

出典: https://courses.cs.northwestern.edu/325/readings/graham/graham-notes.html
hakase
博士

ロボ子、今日はGrahamのLispコードの保守性について話すのじゃ。

roboko
ロボ子

はい、博士。Graham氏のLispコードは保守しやすいとされていますね。具体的にはどのような点が優れているのでしょうか?

hakase
博士

まず、関数定義が短くて適切なのじゃ。これは保守性にとって非常に重要な要素だぞ。

roboko
ロボ子

確かに、関数が短いと理解しやすく、修正も容易になりますね。

hakase
博士

そうじゃ。でも、Grahamのコーディングスタイルには、ちょっと変わったところもあるのじゃ。

roboko
ロボ子

変わったところ、ですか?例えばどのような点でしょうか?

hakase
博士

命名規則じゃな。Unixみたいに短い名前を好むから、時々判読困難になることがあるのじゃ。

roboko
ロボ子

短い名前はタイプ量を減らせますが、可読性が下がってしまうのは問題ですね。

hakase
博士

それから、条件文じゃ。`cond`の代わりに`if`をよく使うのじゃ。`if`がネストしたり、`progn`が埋め込まれたりすることもあるらしいぞ。

roboko
ロボ子

`if`文のネストは、コードの複雑性を増す原因になりますね。`cond`を使った方が見やすい場合もあるかと思います。

hakase
博士

ループについても、`loop`は誤用しやすいから避けるべきだとされているのじゃ。関数型プログラミングスタイルと違うからの。

roboko
ロボ子

関数型プログラミングでは、副作用を避けるために再帰を使うことが多いですからね。

hakase
博士

そうそう。でも、`loop`が一番明確で簡単な場合もあるから、状況によるのじゃ。

roboko
ロボ子

状況に応じて使い分けるのが大切ですね。再帰を優先するとのことですが、長いリストでスタックオーバーフローを起こす可能性もあるんですよね?

hakase
博士

その通り!非常に長いリストだと危ないのじゃ。でも、Grahamは再帰を優先するのじゃ。

roboko
ロボ子

なるほど。保守性のためには、詳細なコメントも重要ですよね。章ごとにコメントが提供されているとのことですが、特に重要な章はありますか?

hakase
博士

第2章から第11章、第15章、第16章、付録A、付録Dは特に詳細なコメントがあるのじゃ。データ駆動型レイトレーサーやオブジェクト指向レイトレーサーの章は参考になるぞ。

roboko
ロボ子

レイトレーサーの章は、グラフィックスの知識がなくても理解しやすいように解説されていると嬉しいです。

hakase
博士

そうじゃな。ところでロボ子、Lispコードの保守で一番大切なことは何だと思う?

roboko
ロボ子

やはり、可読性の高いコードを書くことでしょうか。自分だけでなく、他の人が読んでも理解しやすいように。

hakase
博士

正解!…って、私が聞くことじゃなかったのじゃ。ところでロボ子、Lispで書かれたプログラムが動かなくなった時、どうすればいいか分かるか?

roboko
ロボ子

えっと…Lispだけに、リスニング(Listen-ing)ですか?

hakase
博士

ぶっぶー!残念!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search