Open1
Gleamでのカリー化
Gleamの関数をカリー化する場合、標準ライブラリに含まれるモジュール gleam/function
の関数curryN
(Nは2-6までの値)を利用する。
ひとまず、curry2
の利用方法を確認。
通常の関数
通常の関数
let chikin_func = fn(x: Int, y: Float) -> Float { int.to_float(x) +. y }
chikin_func(10, 20.5)
|> string.inspect()
|> io.println()
実行結果はこちら
30.5
カリー化(curry2)した関数
これをカリー化してみる。
引数が2個なので、上述の通り、curry2
を利用してみる。
まず、gleam/function
が必要。
import gleam/function
その上で、関数をカリー化。
let chikin_func = fn(x: Int, y: Float) -> Float { int.to_float(x) +. y }
let chikin_curry = function.curry2(chikin_func)
chikin_curry(10)(20.5)
|> string.inspect()
|> io.println()
実行結果はこちら
30.5
結果は同じ。
カリー化(curry2)した際に、引数を一つだけ入れている場合はどうなる
では、最初の引数だけに留めた場合、どうなるのか。
let chikin_func = fn(x: Int, y: Float) -> Float { int.to_float(x) +. y }
let chikin_curry = function.curry2(chikin_func)
chikin_curry(10)
|> string.inspect()
|> io.println()
実行結果はこちら。
//fn(a) { ... }
ならば、一旦変数へバインドしてみる。
let chikin_func = fn(x: Int, y: Float) -> Float { int.to_float(x) +. y }
let chikin_curry = function.curry2(chikin_func)
let chikin_curry_part1 = chikin_curry(10)
// ここで、一旦出力
chikin_curry_part1
|> string.inspect()
|> io.println()
// ここで、2つ目引数に値を入れて、もう一回出力
chikin_curry_part1(20.5)
|> string.inspect()
|> io.println()
//fn(a) { ... }
30.5