カリー化単語

カレーカ
  • 0
  • 0pt
掲示板へ

もしかして? → カレー2.0

カリー化(Currying)とは、複数の引数をとる関数を、引数を一つずつとる関数に変換することである。

概要

関数 z = f(x, y) を例に説明すると、h = g(x), z = h(y) (g, hは関数)のようにx, y の2つの引数をとって z を出する関数 f から、xを引数にとって「y を引数にとって z を出する関数 h」を出する関数 g を定義することをカリー化という。

上記で引数が2つの時を z = f(x, y) = h (y) = g(x)(y) のような表記法を許すなら、引数が3つなら、z = f(x, y, w) のとき、h = g(x), i = h(y), z = i(w) (g, h, i は関数)といった形を z = g(x)(y)(w)と書くことができる。

これを帰納的に適用すれば、

n項演算子 ⇒ n-1個の変数から生成された1項演算子

という変形をすることができる。

このgは関数を返り値とする関数、つまり高階関数になっている。Haskellではすべての関数が標準でカリー化されているため、重要な概念となっている。

足し算演算子"+"は2つの引数を取る中置記法の二項演算子である。一般的な表記は以下の通り。

1 + 2

この"+"を単なるアルファベットとみなせば、普通の二変数関数と同じように書くことができる。

(+) 1 2

ここでカリー化を"+"に適用し、第一変数の1を作用させる。

(+ 1) 2

2つの引数足し算する二項演算子"+"が、カリー化により一つの引数に1を足す一項演算子"+1"にすることができた。

この書き方では分かりにくいが、以下ようになっている。

 f(x, y) = x + y

↓ カリー化

gx(y) = x + y

これは自然数自体がある種の「演算子」の働きを持つことを示唆しているが、厳密な話を気にする必要はあまりないだろう。

名前の由来

プログラミング言語Haskellの名前の由来である数学Haskell B. Curryに由来する(Haskellの開発者とは別人)。同一人物の姓と名が別々のものに使われるというのはしいといえる。

お気づきの通り、Curryりはカレーのそれと完全に一致している。だからカレー化と書けないこともないが、なんだかよくわからないことになってしまうので、カリー化と表記される。

どんな食材を使ってもカレー粉を入れて煮込めばなんでもカレーという料理になってしまうみたいな話が数学的にも可だ…と言うことかもしれない。

関連動画

関連項目

【スポンサーリンク】

  • 0
  • 0pt
スマホ版URL:
https://dic.nicovideo.jp/t/a/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

カリー化

1 ななしのよっしん
2019/07/16(火) 16:52:06 ID: JShmN+5Mec
全然利点が分からない……。
偉い人たちが積極的に使ってるということはそれなりの利点が絶対にあるのだろうけど、には難しすぎますw
カリー化しないと実現できない操作」とかってあるのかな?
2 ななしのよっしん
2020/03/10(火) 01:33:35 ID: BU3Rf1Ddvi
意味論とかを考えてる人には論理を見通し良く扱いやすいものにするために必須らしい
データベースの圏の双関手としてデータの直積を自然に構成するのに使うとかなんとかかんとか
データの変換とか格納の「効率の良さ」を感覚じゃなくアルゴリズム的に導くということらしい
ようするに具としてプログラム使ってる人にはあんまり恩恵はないということですな
3 ななしのよっしん
2020/08/08(土) 21:21:42 ID: H7QFlwzpl/
単純に関数カリー化されていると部分適用をすることができるからラムダ式を書く手間が省けるって言うのとポイントフリースタイルが使えるっていうのじゃね?(要するに高階関数が使いやすい)