Structure and Interpretation of Computer Programsの練習問題1.4のコードを見て、一瞬とまどいました。
(define (a-plus-abs-b a b) ((if (> b 0) + -) a b))
bが0より大きければ加算、それ以外は減算が戻ってきて、それがaとbの計算に用いられます。単に条件分岐の中で関数を選んでいるだけなのですが、CやJavaのような“普通”のプログラミング言語ではあまり見かけない書き方です。
僕が常用している言語はMatlabでは、さすがにこれは書けないかと思いましたが、ちょっとやってみました。
function y = a_plus_abs_b(a, b) if b > 0 fhandle = @plus; else fhandle = @minus; end y = feval(fhandle, a, b);
なんか違うけど、本質は捉えられて・・・いる? fhandleという変数に関数ハンドルを代入しなくて済めばいいのですが。あとはC言語のような三項演算子(?:)が使えるともうすこしシンプルに書けそう。