RosettaCodeData/Task/First-class-functions/Crystal/first-class-functions-3.cr
2026-04-30 12:34:36 -04:00

20 lines
516 B
Crystal

def cube (n)
n*n*n
end
add1 = ->(n : Float64) { n + 1 }
sub1 = ->(n : Float64) { n - 1 }
a = [ ->Math.sin(Float64), ->Math.cos(Float64), ->cube(Float64), add1 ]
b = [ ->Math.asin(Float64), ->Math.acos(Float64), ->Math.cbrt(Float64), sub1 ]
s = [ "sin o asin", "cos o acos", "cube o cbrt", "add1 o sub1"]
def compose (f, g)
->(n : Float64) { f[ g[n] ] }
end
composed = a.zip(b).map {|(f, g)| compose(f, g) }
composed.each_with_index do |f, i|
puts "(#{s[i]})(0.5) = #{ f[0.5] }"
end