fizzbuzz = -> x { x % 15 == 0 ? 'FizzBuzz' : x % 5 == 0 ? 'Buzz' : x % 3 == 0 ? 'Fizz' : x } p_fizzbuzz = -> x { p x } << fizzbuzz 1.upto(15){ | n | p_fizzbuzz.call(n) }
p
と合成するだけでは面白くないですね。
fizz = -> x { (x.is_a? Integer) && x % 3 == 0 ? 'Fizz' : x } buzz = -> x { (x.is_a? Integer) && x % 5 == 0 ? 'Buzz' : x } fizzbuzz = -> x { (x.is_a? Integer) && x % 15 == 0 ? 'FizzBuzz' : x } do_fizzbuzz = fizz << buzz << fizzbuzz 1.upto(15){ | n | p do_fizzbuzz.call(n) }
条件に一致したら文字に変換、一致しなかったら素通しする関数にわけて合成してみました。
関数合成の一般的な良い使い道は特に思いつきません。