メインコンテンツまでスキップ

Currying についてのメモ

まだ十分整理できていないがカリー化についてわかったことを一旦書いてみる。

Currying とは複数の引数を取る関数を、一つの引数を取る複数の関数の形で書くことを言うっぽい。

例えば Python で

def adder(a, b):
return a + b

adder(2, 3) # returns 5

という関数をカリー化すると

def adder(a):
def inner_function(b):
return a + b
return inner_function

adder(2)(3) # returns 5

という書き方になる。

クロージャだし正直ややこしいと思うのだがどうだろう。管見の限りだと Python と JavaScript では、クロージャを作ったら結果的にカリー化したことになることがある、という感じで積極的にカリー化したほうが良いということではなさそう。関数型言語で役に立つ概念で、 Python と JavaScript ではカリー化するメリットはほとんどないように思える。

ところで2つ目のコードを lambda を使って書くと下のようになる。

def adder(a):
return lambda b: a + b

adder(2)(3) # returns 5

lambda はコードが読みにくくなると思って避けていたが、ここでは lambda を使うことで return が1個となり、関数に名前をつけるよりも簡素になってわかりやすいかもと思った。

以下、リンク集。