TwitterでCommon Lispのアンチパターンの話があって、Schemeでもリファクタリングの際のパターン(というほど大げさものでもないけど)があるんじゃないかと思ったので、思いつくまま挙げてみる。 再帰に一時変数を導入して末尾再帰にする(基本) consを使った場合には順番が逆になるので最後にreverseをかける 再帰(末尾再帰)からmapやapplyを使う形に書き換える 実際には、mapやapplyが適したケースは最初から自明なことも多いけど 同じ計算を繰り返している部分をletでまとめる 長いlambdaに内部defineで名前を付ける 多値の受け渡しの方法を変更する ペア(またはリスト)にして渡す CPSを使う values/receiveを使う(Gauche等) R5RSのcall-with-valuesって使ってるの見たことないなあ SRFIを使う 目的に合ったシンプ