Schemeにおけるリファクタリングのパターン
TwitterでCommon Lispのアンチパターンの話があって、Schemeでもリファクタリングの際のパターン(というほど大げさものでもないけど)があるんじゃないかと思ったので、思いつくまま挙げてみる。
- 再帰に一時変数を導入して末尾再帰にする(基本)
- consを使った場合には順番が逆になるので最後にreverseをかける
- 再帰(末尾再帰)からmapやapplyを使う形に書き換える
- 実際には、mapやapplyが適したケースは最初から自明なことも多いけど
- 同じ計算を繰り返している部分をletでまとめる
- 長いlambdaに内部defineで名前を付ける
- 多値の受け渡しの方法を変更する
- SRFIを使う
- 目的に合ったシンプルな関数を自作した方がSRFIの関数より高速な場合もある。ケースバイケース
【20:15追記】
- 複数のmap等でリストを走査している場合、処理をまとめることでリストの走査回数をなるべく少なく抑える