|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ 第 : [だい] (n,pref) ordinal ・ 第一 : [だいいち] 1. (adv,n) first 2. foremost 3. # 1 ・ 一 : [いち] 1. (num) one ・ 一級 : [いっきゅう] 1. (adj-na,n) one grade 2. first-class 3. primary ・ 級 : [きゅう] 1. (n,n-suf) class, grade, rank 2. school class, grade ・ 関 : [せき, ぜき] (suf) honorific added to names of makuuchi and juryo division sumo wrestlers ・ 関数 : [かんすう] (n) function (e.g., math, programming, programing) ・ 数 : [すう, かず] 1. (n,n-suf) number 2. figure
計算機科学において、第一級関数(だいいっきゅうかんすう、、ファーストクラスファンクション)〔Programming language pragmatics , by Michael Lee Scott, section 11.2 "Functional Programming".〕とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のことである。型のある言語では、関数型(かんすうがた、)という型の値となる。具体的にはプログラムの実行時に生成され、データ構造に含めることができ、他の関数の引数として渡したり、戻り値として返したりすることのできる関数をいう。この概念はメタプログラミングとは異なり、コンパイラ呼び出しやeval関数によって生成された関数は含まれない。無名関数も参照。 第一級関数は関数型言語には必要不可欠であり、高階関数のような形で日常的に用いられる。例として、関数とリストを引数に取り、リストの各要素に関数を適用した結果のリストを返すmap (mapcar) 関数が挙げられる。map関数をサポートするプログラミング言語は、何らかの形で関数を関数の引数として渡すことを許容しなければならない。 Schemeでの例: スタックベースのプログラミング言語では、高階関数の実装における自由変数の取り扱いに関して困難な問題が生じる。これはFunarg問題("function argument" の略称、)として知られている。 型理論では、型''A''の値を受け取り、型''B''の値を返す関数を''A'' → ''B''(もしくは''B''''A'')と書く。これは''P'' → ''Q''と似ているが実は同じもので、カリー・ハワード対応(カリー・ハワード同型対応、)によれば、関数型は論理包含に関係しており、ラムダ抽象は自然演繹における仮説、関数の適用はモーダスポネンスに相当する。また多くのプログラミング言語の機能として、型理論は第一級関数が連想配列などのデータ構造をモデルするのにも用いられる。 圏論においては、第一級関数は閉圏に相当する。たとえば単純型付きラムダ計算()は、カルテシアン閉圏(デカルト閉圏)の言語に相当する。 == 利用 == HaskellやLisp、ML、Schemeのような関数型言語は第一級関数を全面的にサポートしている。他に第一級関数をサポートしているプログラミング言語としては、ECMAScript (ActionScript、JavaScript)、Io、Lua、Nemerle、Perl、PHP、Python、Ruby、Scala、Tcl/Tkなどが挙げられる。 CやC++、Pascalなどのプログラミング言語は関数ポインタをサポートしており、データ構造に含めたり他の関数に引数として渡したりすることができる。しかし、それらの関数は一般にリフレクションなしではプログラムの実行時に動的に生成することができないため、第一級関数をサポートしているとは見なされていない。 C++はoperator()を含むユーザ定義演算子をサポートしており、operator()を持つクラスは関数オブジェクトとして扱うことができる。関数オブジェクトはC++では他の第一級オブジェクトと同じように操作することができる。また、C++11では無名関数がサポートされている。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「第一級関数」の詳細全文を読む スポンサード リンク
|