2018年11月7日水曜日

orとreturn

 どうもLispは関数型だという意識がありすぎて、returnがどうしてあるんだろう、と思っていたらたとえば、returnがあれば、次のようなコードはあっさり書ける。

(block nil
  (when-let(w (処理1))
     (return w))

  (when-let(w (処理2))
     (return w)))

 実際に書いたのはelispのclでだけど。
 処理1が成功したらその返却値を返し、失敗したときは処理2を行なってその返却値を——というパターン。便利。というか、C言語とかではわりと使っていた記憶が……。さらにラップするマクロを書いてもいいんじゃないか、と思ったのだけれど、よくよく考えたらorで書けるんだった…orz。

(or (処理1)
    (処理2))

ただ、あとからソースを見直しとき、前者の方が見易いかもしれない。