「高階関数」の版間の差分

削除された内容 追加された内容
R28Bot (会話 | 投稿記録)
m Bot: テンプレートの差替え (WP:BOTREQ#スタブテンプレート修正依頼)
Chinamie (会話 | 投稿記録)
編集の要約なし
12行目:
(f 2 3))
 
3つめの<tt>calc</tt>は、他の2引数関数を受けとり、その関数の引数として2と3を渡して計算させる関数である。即ち、これは関数を引数にとる高階関数となる。ちなみに、以下は実行例である。
 
> (calc add) ;2+3
27行目:
5
ここで、まず<tt>(add 2)</tt>の戻り値は'''1つ引数をとって2を足す関数'''になる。そして、戻り値として返ってきた関数に、更に3を渡して最終的な計算結果を得ている。つまり、<tt>add</tt>自身は関数を戻り値とする高階関数となっている。
ちなみに上記のような、n引数ある関数を、1引数だけの高階関数に変換する操作を[[カリー化]]と呼ぶ。
 
ほとんどの[[データ型|型付き]]関数型言語においては、関数は最初からカリー化して与えるのが一般的である(つまりn引数関数を、n個の引数の[[直積]]を取る関数とするのではなく、1引数の高階関数をn個並べたような型で定義する。)例えば[[Haskell]]において、
41行目:
 
例えばCで[[#関数を引数にとる関数]]を書くと次のようになる。
#include <stdio. h="h">
int