どうも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))
ただ、あとからソースを見直しとき、前者の方が見易いかもしれない。