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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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