ロゴ
ユニオンペディア
コミュニケーション
Google Play で手に入れよう
新しい! あなたのAndroid™デバイスでユニオンペディアをダウンロードしてください!
無料
ブラウザよりも高速アクセス!
 

関数オブジェクト

索引 関数オブジェクト

関数オブジェクト(かんすうオブジェクト、function object)は、プログラミング言語において、関数(サブルーチンないしプロシージャ)を、オブジェクトとしたものである。手続きオブジェクトとも言う(プロシージャ=手続き)。なお、ここでのオブジェクトの語は、いわゆるオブジェクト指向のそれに限らず、「第一級オブジェクト」という語におけるのと同じ、メモリ上に空間を確保されたもの、といった意味である。関数が第一級オブジェクトである場合は特に第一級関数と言う。 関数と変数の名前空間が共通である言語の場合、構文の設計によっては、a.

48 関係: 多重定義委譲圏論ポール・グレアムリテラルブロック (プログラミング)プログラミング言語プロシージャデリゲート (プログラミング)オブジェクト (プログラミング)オブジェクト指向クロージャコールバック (情報工学)ジェネリックプログラミングジェネレータ (プログラミング)サブルーチン動的スコープC SharpC++CとC++の演算子C言語Common Lisp第一級オブジェクト第一級関数糖衣構文無名関数D言語Emacs Lisp静的スコープ計算機プログラムの構造と解釈関数 (数学)関数型言語関数へのポインタ関手Facade パターンFactory Method パターンJavaLISPPerlPrologPythonRubyRubyKaigiSchemeSmalltalkStandard MLStandard Template LibraryStrategy パターン

多重定義

多重定義 (たじゅうていぎ) あるいは オーバーロード (overload)とは、プログラミング言語において関数や演算子やメソッドの同一名や同一の演算子記号について複数定義し、利用時にプログラムの文脈に応じて選択することで複数の動作を行わせる仕組みである。 例えば整数型や浮動小数点型、複素数型の値について同じ「abs」という関数を定義して絶対値を求める、型ごとに個々の意味で名前やIDを返す関数を定義するなどが挙げられる。多重定義する対象に応じてそれぞれ関数の多重定義、演算子の多重定義、メソッドの多重定義と呼ばれる。また、Common Lispなどでは、多重定義可能な関数としてgeneric function(:en:Generic function)がある(このgenericはジェネリックプログラミングのジェネリックである)。 上書きを意味するオーバーライドとはまったく異なる。.

新しい!!: 関数オブジェクトと多重定義 · 続きを見る »

委譲

委譲 (delegation) とはオブジェクト指向プログラミングにおいて、あるオブジェクトの操作を一部他のオブジェクトに代替させる手法のこと。.

新しい!!: 関数オブジェクトと委譲 · 続きを見る »

圏論

圏論(けんろん、category theory)は、数学的構造とその間の関係を抽象的に扱う数学理論の 1 つである。 考えている種類の「構造」を持った対象とその構造を反映するような対象間の射の集まりからなる圏が基本的な考察の対象になる。 数学の多くの分野、また計算機科学や数理物理学のいくつかの分野で導入される一連の対象は、しばしば適当な圏の対象たちだと考えることができる。圏論的な定式化によって同種のほかの対象たちとの、内部の構造に言及しないような形式的な関係性や、別の種類の数学的な対象への関連づけなどが統一的に記述される。.

新しい!!: 関数オブジェクトと圏論 · 続きを見る »

ポール・グレアム

ポール・グレアム(Paul Graham、1964年 -)は、米国のLispプログラマーでエッセイスト。『ANSI Common Lisp』や『ハッカーと画家』の著者としても知られている。.

新しい!!: 関数オブジェクトとポール・グレアム · 続きを見る »

リテラル

リテラル(literal)は、「文字どおり」「字義どおり」を意味する語で、 と同じくラテン語の (文字)に由来する。数理論理学とコンピュータプログラミングで異なる意味の専門用語として使われる。.

新しい!!: 関数オブジェクトとリテラル · 続きを見る »

ブロック (プログラミング)

プログラミング言語におけるブロック(block)は、コードのまとまり(コードブロック)のことで、「文 (プログラミング) 」(statement)から成る言語では複数個(0個以上~2個以上。言語により異なる)の文がまとまってひとつの文になっているブロックを複文(compound statement)と呼ぶものもある。「区」という訳語を使っている仕様もある。雰囲気としては自然言語における段落にも似ているが、現代言語学を知っていれば、プログラミング言語における「文」と「ブロック」の関係は、言語学でいう「語」と「句」の関係に近い。 なおプログラミング関係で、これと全く違うものに、他にも「ブロック」という語を使うものがいくつかあるので注意。入出力について「待たされる(ブロックされる)」という意味や、一種のクロージャの実装であるC言語の拡張のブロックなどである。 ブロックには、C言語に代表される、で囲まれるスタイル、ALGOLにはじまり、その影響を受けたPascalやAdaなど、beginとendのようなキーワードで囲むスタイル、Pythonなどのオフサイドルールによるスタイルなどがある。 自然言語の段落と異なり、ブロックは入れ子にすることができる(つまり、言語学でいう「語」と「句」のほうに近い、とはそういうことである)。すなわち、ブロック内にブロックを作成することができる(正確な理解としては、ブロックは文の一種であり、ブロックの中身は文の並びであるから、ブロックの中身にまたブロックが現れることもできる、ということになる。プログラミング言語の学習においては、絶対的に不正確な理解に直結する自然言語からの類推ではなく、プログラミング言語は形式言語なのであるから、BNFなど形式的な(フォーマルな)仕様などを理解できるように努めたほうが、結果として早道である)。 C言語などでは、ブロックは変数のスコープ(可視範囲。生存期間(エクステント)とは違うので注意)の区切りである。すなわち、あるブロック内で定義された変数には((前置単項 & 演算子と)ポインタ等により、エスケープされない限り(エスケープ解析を参照))ブロック外からはアクセスできない。JavaScriptは、以前はブロックは変数のスコープに影響しないという仕様だったが、ECMAScript 6th Edition(ECMAScript 2015)で導入された let declaration (let宣言) による変数は、それが宣言されたブロックの最後までが可視範囲となる。 SmalltalkやRubyにある似たようなものは、ブロックと呼んではいるが、複文ではない別のもので、メソッド呼び出しに付加する特別な引数のようなもの、である。Rubyではそれ自体はオブジェクトではないが、Smalltalkではオブジェクトである。なお、Rubyにおける複文に相当するものとしては、if~endなどにおいて、ifそれ自体がコードのかたまりの開始のキーワードとして機能するというEiffel風のスタイルを採っている。.

新しい!!: 関数オブジェクトとブロック (プログラミング) · 続きを見る »

プログラミング言語

プログラミング言語(プログラミングげんご、programming language)とは、コンピュータプログラムを記述するための形式言語である。なお、コンピュータ以外にもプログラマブルなものがあることを考慮するならば、この記事で扱っている内容については、「コンピュータプログラミング言語」(computer programming language)に限定されている。.

新しい!!: 関数オブジェクトとプログラミング言語 · 続きを見る »

プロシージャ

プロシージャ (procedure)とは、プログラミングにおいて複数の処理を一つにまとめたものをいう。手続きとするのが定訳である。一連の処理を意味を持った一まとまりにすることで、再利用性が高まり、プログラム中に繰り返して現れる処理を1ヶ所で記述でき、プログラムの保守、管理を容易にする。 繰り返し利用されることから、ルーチンとも言う。呼び出し関係は通常階層構造をなし、その最上位にある、プログラム全体のエントリーポイントを含むルーチンをメインルーチン、呼び出されるものをサブルーチンと言う。また、関数と呼ばれることもある(通常、数学における関数とは違ったものであるので、注意が必要である)。 プログラミング言語により、プロシージャのような構文の分類や呼称はさまざまである。詳細はサブルーチンの記事を参照のこと。 Category:プログラミング言語の構文 he:שגרה ur:دستورالعمل.

新しい!!: 関数オブジェクトとプロシージャ · 続きを見る »

デリゲート (プログラミング)

デリゲート (delegate、デレゲート) とは、C#、Visual Basic.NETなどの、.NET Frameworkのプログラミング言語にある機能である。.

新しい!!: 関数オブジェクトとデリゲート (プログラミング) · 続きを見る »

オブジェクト (プログラミング)

ブジェクト(object)はオブジェクト指向プログラミングにおいて、プログラム上の手続きの対象を抽象化する概念である。.

新しい!!: 関数オブジェクトとオブジェクト (プログラミング) · 続きを見る »

オブジェクト指向

ブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」「目的重視の」という意味の形容詞) の日本語訳である。 オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。複雑なシステム記述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、オブジェクト指向の考え方は必須である。.

新しい!!: 関数オブジェクトとオブジェクト指向 · 続きを見る »

クロージャ

ージャ(クロージャー、closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。この概念は少なくとも1960年代のSECDマシンまで遡ることができる。まれに、関数ではなくとも、環境に紐付けられたデータ構造のことをクロージャと呼ぶ場合もある。クロージャをサポートした言語のコーディングでは、関数の中に関数を定義することができる。その際に、外側の関数で宣言された変数を内側の関数で操作することができる。主な利点としてはグローバル変数の削減が挙げられる。 典型的にはクロージャは、外側の関数(以下、エンクロージャ)の内側の関数リテラルや、ネストした関数定義によって必要になる。言語により、そのような内側の関数内に出現する自由変数(内側の関数の仮引数でもなく、内側の関数自身のローカル変数でもない変数)の扱いは異なるが、自由変数が、その呼び出しにおけるエンクロージャのその名前の変数を、レキシカルに参照するのがクロージャであり、実行時に外部の関数が実行された際、クロージャが形成される。クロージャは内部の関数のコードとエンクロージャのスコープ内の必要なすべての変数への参照からなる。 クロージャはプログラム内で環境を共有するための仕組みである。レキシカル変数はグローバルな名前空間を占有しないという点でグローバル変数とは異なっている。またオブジェクトのインスタンス変数とは、オブジェクトのインスタンスではなく関数の呼び出しに束縛されているという点で異なる。 クロージャは関数型言語では遅延評価やカプセル化のために、また高階関数の引数として広く用いられる。 例: クロージャを使ったカウンタの例を Scheme で示す。 (define (new-counter) (define c (new-counter)) (display (c)); 1 (display (c)); 2 (display (c)); 3 関数 new-counter の中でクロージャが使用されている。c に代入された無名関数は new-counter 内のローカル変数 count を参照している。c を呼び出すたびに count はインクリメントされていく。.

新しい!!: 関数オブジェクトとクロージャ · 続きを見る »

コールバック (情報工学)

ールバックでは、本来の caller のレベルに戻すことが多い 別の方式では、最初にコールバックを登録し、後で非同期的に呼び出す コールバック(英: Callback)とは、プログラミングにおいて、他のコードの引数として渡されるサブルーチンである。これにより、低レベルの抽象化層が高レベルの層で定義されたサブルーチン(または関数)を呼び出せるようになる。 一般に、まず高レベルのコードが低レベルのコードにある関数を呼び出すときに、別の関数へのポインタやハンドルを渡す。低レベルの関数を実行中に、その渡された関数を適当な回数呼び出して、部分タスクを実行する場合もある。別の方式では、低レベル関数は渡された関数を「ハンドラ」として登録し、低レベルの層で非同期的に(何らかの反応の一部として)後で呼び出すのに使う。 コールバックは、ポリモーフィズムとジェネリックプログラミングの単純化された代替手法であり、ある関数の正確な動作は、その低レベル関数に渡される関数ポインタ(ハンドラ)によって変わってくる。これは、コード再利用の非常に強力な技法と言える。.

新しい!!: 関数オブジェクトとコールバック (情報工学) · 続きを見る »

ジェネリックプログラミング

ェネリック(総称あるいは汎用)プログラミング(generic programming)はデータ形式に依存しないコンピュータプログラミング方式である。.

新しい!!: 関数オブジェクトとジェネリックプログラミング · 続きを見る »

ジェネレータ (プログラミング)

ェネレータは、プログラムにおいて、数列の各要素の値などを次々と生成(ジェネレート)し他の手続きに渡す、という機能を持っている手続きである。値を渡す方法としては、コールバックのようにして他の手続きを呼ぶものもあれば、呼び出される度に次々と異なる値を返す関数であることもある。.

新しい!!: 関数オブジェクトとジェネレータ (プログラミング) · 続きを見る »

サブルーチン

ブルーチン(subroutine)は、コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたものである。繰り返し利用されるルーチン作業をモジュールとしてまとめたもので、呼び出す側の「主」となるもの(メインルーチン)と対比して「サブルーチン」と呼ばれる。サブプログラム (subprogram) と呼ばれることもある。また、「サブ」をつけずに「ルーチン」と呼ぶこともある。 プログラムのソース中で、繰り返し現れる作業をサブルーチン化することで、可読性や保守性を高く保つことができる。繰り返し現れる作業でなくても、意味的なまとまりを示すためにサブルーチン化することもある。また、キャッシュのような階層的メモリの設計を持つコンピュータ(現在のパソコンやワークステーションなどほぼすべて)では、よく使われるサブルーチンがキャッシュに格納されることで高速な動作を期待できる。.

新しい!!: 関数オブジェクトとサブルーチン · 続きを見る »

動的スコープ

動的スコープ、ダイナミックスコープ(dynamic scope)とは、プログラミング言語におけるスコープの一種である。 動的スコープは、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープである。このとき参照されるのは、親子関係を親側に辿り、より近いブロックにある変数である。以下の疑似コードでは: ブロックBから呼び出されたブロックAは、ブロックBで定義されている変数xを参照できる。一方、ブロックCから呼び出されたブロックAは、ブロックBで定義されている変数xは参照できない。 動的スコープは強力な反面、ミスを招きやすいため使用に注意が必要である。例えば以下の疑似コードでは呼び出し元ブロックによって変数の値が変化することを示している。 動的スコープの例としては古典LISPやEmacs Lisp、LOGO、Perl(「local」宣言した変数)、Bash(関数内で「local」宣言した変数)などがある。.

新しい!!: 関数オブジェクトと動的スコープ · 続きを見る »

C Sharp

C#(シーシャープ)は、アンダース・ヘルスバーグが設計(デザイン)したプログラミング言語であり、構文(syntax)は(名前にもある通り)C言語や、C言語風に構文が設計されたC++やJavaなどの影響があるが、構文以外についてはヘルスバーグが以前の所属であるBorlandで設計したDelphiからの影響がある。 Microsoftによる謳い文句としては、マルチパラダイムプログラミング言語、強い型付け、命令型、宣言型、手続き型、関数型、ジェネリック、オブジェクト指向の要素を持つ、などといった点が強調されている。 CLIといった周辺も含め、Microsoftのフレームワーク「.NET Framework」の一部である他、VJ++で「非互換なJava」をJavaに持ち込もうとしたような以前のMicrosoftとは異なり、その多くの仕様を積極的に公開し標準化機構に託して自由な利用を許す(ECMA-334、ISO/IEC 23270:2003、JIS X 3015)など、同社の姿勢の変化があらわれている一面でもある(実際に「Mono」という、フリーソフトウェアの定義に合致したライセンスの、コミュニティによる実装がある)。.

新しい!!: 関数オブジェクトとC Sharp · 続きを見る »

C++

C++(シープラスプラス)は、汎用プログラミング言語の一つである。日本語では略してシープラプラ、シープラなどとも呼ばれる。.

新しい!!: 関数オブジェクトとC++ · 続きを見る »

CとC++の演算子

本項はC++とC言語における演算子の一覧である。C++に存在するすべての演算子を掲示し、さらにCにも存在するかどうかを示している。なお、Cでは演算子の多重定義は不可能である。 &&、||、?:(条件演算子)ならびに,(コンマ演算子)はを形成する。ただし、多重定義されていない場合に限る。 これらのうち、Cにも存在するものは、コンマ演算子と矢印演算子を除いて、Java、Perl、C#、PHPにも同じ優先順位・結合性を持って存在する。ただし、PHPの条件演算子は例外的に左から右への結合である。.

新しい!!: 関数オブジェクトとCとC++の演算子 · 続きを見る »

C言語

C言語(シーげんご)は、1972年にAT&Tベル研究所のデニス・リッチーが主体となって開発したプログラミング言語である。英語圏では単に C と呼んでおり、日本でも文書や文脈によっては同様に C と呼ぶことがある。.

新しい!!: 関数オブジェクトとC言語 · 続きを見る »

Common Lisp

Common Lisp(コモン・リスプ)は、コンピュータ・プログラミング言語 Lispの標準(の、ひとつ)であり、Lisp方言のひとつである。Common Lispの略称はCL(ごくまれにclispとも。なおCLISPという実装が実在するので混同回避のためあまり用いられない)。規格はANSIによる ANSI INCITS X3.226-1994 (R2004) 。仕様を指すこともあれば、実装を指すこともある。いくつかの、フリーソフトウェアの定義に合致したライセンスによりライセンスされている実装や、オープンソースの定義に合致したライセンスによりライセンスされている実装や、プロプライエタリなライセンスによりライセンスされている実装がある。 Lispの基本的な特徴の他、いくつかのプログラミングパラダイムのLispへの取り込みについて標準を提供しているという、マルチパラダイムプログラミング言語という面がある。.

新しい!!: 関数オブジェクトとCommon Lisp · 続きを見る »

第一級オブジェクト

一級オブジェクト(ファーストクラスオブジェクト、first-class object)は、あるプログラミング言語において、たとえば生成、代入、演算、(引数・戻り値としての)受け渡しといったその言語における基本的な操作を制限なしに使用できる対象のことである。ここで「オブジェクト」とは広く対象物・客体を意味し、必ずしもオブジェクト指向プログラミングにおけるオブジェクトを意味しない。第一級オブジェクトは「第一級データ型に属す」という。 この言葉は1960年代にChristopher Stracheyによって「functions as first-class citizens」という文脈で初めて使われた。 言語によって異なるが、第一級オブジェクトは概ね次のような性質をもつ。.

新しい!!: 関数オブジェクトと第一級オブジェクト · 続きを見る »

第一級関数

計算機科学において、第一級関数(だいいっきゅうかんすう、first-class function、ファーストクラスファンクション), by Michael Lee Scott, section 11.2 "Functional Programming".

新しい!!: 関数オブジェクトと第一級関数 · 続きを見る »

糖衣構文

糖衣構文(とういこうぶん、)は、プログラミング言語において、読み書きのしやすさのために導入される書き方であり、複雑でわかりにくい書き方と全く同じ意味になるものを、よりシンプルでわかりやすい書き方で書くことができるもののことである。構文上の書換えとして定義できるものであるとも言える。 の直訳に近い構文糖(こうぶんとう)とも言い、糖衣構文あるいは構文糖衣とするのは少々意訳的だがよく言われている。.

新しい!!: 関数オブジェクトと糖衣構文 · 続きを見る »

無名関数

無名関数(anonymous functionあるいはnameless function)とは、名前付けされずに定義された関数のことである。無名関数を表現するための方法には様々なものがあるが、近年主流となっているのはラムダ式による記法である。無名関数を表現するリテラル式は、関数リテラル (function literal) とも呼ばれる。値がある場合は関数オブジェクトであるものが多い。.

新しい!!: 関数オブジェクトと無名関数 · 続きを見る »

D言語

D言語(ディーげんご、D programming language)は、プログラミング言語のひとつ。C言語をベースとしABI互換を保ちつつも、テンプレートによるジェネリックプログラミングやオブジェクト指向プログラミング、関数型プログラミングなどをサポートするマルチパラダイムプログラミング言語である。.

新しい!!: 関数オブジェクトとD言語 · 続きを見る »

Emacs Lisp

Emacs Lispは、GNU EmacsとXEmacsテキストエディタ(この記事ではあわせてEmacsと呼ぶ)で使われているLispプログラミング言語の方言である。Emacs組込みの編集機能のうち、C言語で書かれた部分以外のほとんどを実装するのに使われている。また、利用者によるEmacsのカスタム化や拡張のために用いられる。Lisp処理系で、もっとも使われている言語である。 Emacs Lispは、UnixのBourne Shell、Python、Perl、scsh、GNU Guile などのようなスクリプト言語として使うこともでき、コマンド行や実行ファイルからも呼び出せる。バッファや移動コマンドのような編集機能は、Lispの機能を補いバッチ・モードで動作する。 Emacs Lispは、ときにElispと呼ばれることもある。ただし、この呼び方は同名の無関係な古いLisp方言と混同されるおそれがある。機能でいうと、Common Lispの影響も後にみえるが、Maclisp方言と強い関係がある 。プログラミング・メソッドとして、手続き指向プログラミングと関数的プログラミングに対応している。関数をデータとして扱えるなどの強力な機能のため、(TECOを拡張言語としていたオリジナルの) Emacsの書換えにあたり、リチャード・ストールマンは拡張言語としてLispを選んだ。ストールマンがGosling EmacsをGNU Emacsへ書き換えていたとき、Common Lisp とは違ってSchemeは既に存在した。しかし、当時のワークステーションの性能は貧弱であったため、Schemeよりももっと簡単に最適化のできるLisp方言を開発する必要があった。 Emacs Lispは、アプリケーション・プログラミングで使われる方言群であるSchemeやCommon Lispとは根本的に異なる。大きな違いの1つは、デフォルトで字句的スコープではなく動的スコープを使うことである。つまり、呼出し関数の局所変数は、呼び出された関数からも参照できるが、定義時のスコープで参照しているのではない。 Emacs Lispを書くのがGNU Emacsをカスタム化する唯一の方法ではない。バージョン20以降のGNU Emacsには「カスタム化」機能があり、利用者はグラフィカルなインターフェースによって一般的なカスタム化変数を設定できる。「カスタム化」機能は、比較的単純なものに制限されているものの、利用者の代わりにEmacs Lispのコードを書いてくれる。利用者全員がEmacsの提供する高度な拡張性が必要なわけではないし、またそういう人は自分でEmacs Lispのコードを書けるものだ。.

新しい!!: 関数オブジェクトとEmacs Lisp · 続きを見る »

静的スコープ

静的スコープ(せいてきスコープ、英: static scope)とは、プログラミング言語におけるスコープの一種。字面(レキシカル、英: lexical)のみから決定できるためレキシカルスコープ(lexical scope)ともいう(「構文」は一般に syntax の定訳であり、「レキシカル」と混同するのは誤解を招く)。 まず、一般的なローカル変数のスコープについて考える。 ブロックなどの構造を持つプログラミング言語では、あるブロックの内側のローカル変数はそのブロックの外側からは「見えない」というものが多い(以前のJavaScriptのように、関数ローカルのみで、ブロックローカルというスコープは無いものもある)。以下の疑似コードでは、 ブロックAで定義されている変数xとブロックBで定義されている変数xは同じ識別子を持つが、ブロックが異なるため実体は別である。また、ブロックBからは、さらに内側のブロックCで定義されている変数を参照することはできない。逆にブロックCからはブロックBで定義されている変数xとブロックCで定義されている変数yが参照可能である。 以上のようなスコープはローカル変数として一般的なものである。しかし、上記の疑似コード中にある f.

新しい!!: 関数オブジェクトと静的スコープ · 続きを見る »

計算機プログラムの構造と解釈

『計算機プログラムの構造と解釈』(Structure and Interpretation of Computer Programs。原題の略称SICPがよく使われる)は、1985年にMIT出版から刊行された、計算機科学分野の古典的な教科書。著者はマサチューセッツ工科大学 (MIT) の教授ハル・アベルソンとジェラルド・ジェイ・サスマン、ジェラルドの妻ジュリー・サスマン。かつてMITコンピュータ科学科の6.001として知られるプログラミングの入門講義で使われていた。第2版(ハードカバー版 ISBN 0-262-01153-0、ペーパーバック版 ISBN 0-262-51087-1)が1996年に刊行された。計算機科学の古典として広く認められている。 表紙に魔術師が描かれているため魔術師本(Wizard Book)としても知られ、まれに表紙の色をとって紫本(Purple Book)とも呼ばれる。 プログラミング言語LISPの方言Schemeが用いられ、抽象化、再帰、インタプリタ、メタ言語的抽象といった計算機科学の概念の真髄が説明されている。 第二版の和田英一による日本語訳(ISBN 978-4894711631)がピアソン桐原から2000年2月に発売された。、和田はHTML版を公開した。。。その後2014年5月に翔泳社より再版されている。.

新しい!!: 関数オブジェクトと計算機プログラムの構造と解釈 · 続きを見る »

関数 (数学)

数学における関数(かんすう、、、、、函数とも)とは、かつては、ある変数に依存して決まる値あるいはその対応を表す式の事であった。この言葉はライプニッツによって導入された。その後定義が一般化されて行き、現代的には数の集合に値をとる写像の一種であると理解される。.

新しい!!: 関数オブジェクトと関数 (数学) · 続きを見る »

関数型言語

関数型言語(かんすうがたげんご、functional language)は、以下に述べる関数型プログラミングを基本スタイルとして推奨する機能を持つプログラミング言語、関数型プログラミング言語の略称である。.

新しい!!: 関数オブジェクトと関数型言語 · 続きを見る »

関数へのポインタ

関数へのポインタは、多くのプログラミング言語におけるポインタの一種である。関数へのポインタをデリファレンスすれば、そのポインタが指し示す関数(サブルーチン)を呼び出せる。関数へのポインタを使えば高階関数を作ることができる。 関数オブジェクトは、関数へのポインタに似ているが、コード領域中のエントリポイントを指す単なるポインタである関数へのポインタと違い、データ領域上に実体を持つオブジェクトであるという点が異なっている(実装の詳細は言語や処理系により異なるが)。そのため、関数オブジェクトはデータを保持でき、クロージャを再現することもできる。ゆえに、関数オブジェクトは、「関数へのポインタ」ではなく「関数」という型と値を持つようなものと言え、より強力である。 Javaなどでは、関数へのポインタを使用できないが、そのような言語では、メソッドを1つだけ持つインタフェースで同様のことを行える。また、C#やVisual Basic.NETなどといった.NET Framework用の言語には、デリゲートがある。 第一級オブジェクトとして関数を使用できる(第一級関数がある)言語では、関数も引数で渡したり、戻り値で返したり、他の関数から動的に作成したりできるなどデータ同様に扱えるため、関数へのポインタは必要とされない。.

新しい!!: 関数オブジェクトと関数へのポインタ · 続きを見る »

関手

圏論における関手(かんしゅ、functor)は、圏から圏への構造と両立する対応付けである。関手によって一つの数学体系から別の体系への組織的な対応が定式化される。関手は「圏の圏」における射と考えることもできる。 関手の概念の萌芽はエヴァリスト・ガロアによる群を用いた代数方程式の研究に見ることができる。20世紀はじめのエミー・ネーターらによる加群の研究において拡大加群などさまざまな関手的構成が蓄積された。20世紀半ばの代数的位相幾何学において実際に関手が定義され、図形から様々な「自然な」代数的構造を取り出す操作を定式化するために利用された。ここでは(基本群のような)代数的対象が位相空間から導かれ、位相空間の間の連続写像は基本群の間の代数的準同型を導いている。その後アレクサンドル・グロタンディークらによる代数幾何学の変革の中でさまざまな数学的対象の関手による定式化が徹底的に追求された。.

新しい!!: 関数オブジェクトと関手 · 続きを見る »

Facade パターン

Facade パターンあるいは Façade パターン(ファサード・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義された、コンピュータソフトウェアのデザインパターンの1つである。Facade(ファサード)とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的とする。.

新しい!!: 関数オブジェクトとFacade パターン · 続きを見る »

Factory Method パターン

Factory Method パターン(ファクトリメソッド・パターン)エリック・ガンマ、ラルフ・ジョンソン、リチャード・ヘルム、ジョン・ブリシディース(著)、グラディ・ブーチ(まえがき)、本位田真一、吉田和樹(監訳)、『オブジェクト指向における再利用のためのデザインパターン』、ソフトバンクパブリッシング、1995。ISBN 978-4-7973-1112-9.

新しい!!: 関数オブジェクトとFactory Method パターン · 続きを見る »

Java

Java(ジャバ)は、狭義ではプログラミング言語Javaを指す。広義では言語仕様以外にも、仕様が与えられているJavaクラスライブラリやJava仮想マシン、さらにはJDKやJREなどの公式のものをはじめとする、場合によってはサードパーティのものなどを含め曖昧にJavaプラットフォームと総称されるようなものなどのエコシステムなどを指すこともある。構文についてはJavaの文法の記事を参照。.

新しい!!: 関数オブジェクトとJava · 続きを見る »

LISP

LISPは、プログラミング言語である。 によって記述される。-->前置記法などが特徴である。 1958年にはじめて設計されたLISPは、現在広範囲に使用されている高水準プログラミング言語の中でもFORTRANに次いで2番目に古い。ただし、FORTRANと同様に、現在のLISPは初期のものから非常に大きく変化している。 これまでに多数の方言が存在してきたが、今日最も広く知られるLISP方言は、Common LispとSchemeである。 元々、LISPは、アロンゾ・チャーチのラムダ計算表記法に影響を受け、コンピュータープログラムのための実用的かつ数学的な表記法として作られた。そして、すぐに人工知能研究に好まれるプログラミング言語になった。最初期のプログラミング言語として、LISPは計算機科学にて、木構造、ガベージコレクション、動的型付け、条件分岐、高階関数、再帰、セルフホスティング、コンパイラを含む多くのアイディアを切り開いた。 LISPの名前は、「list processor」に由来している。リストはLISPの主要なデータ構造であり、LISPソースコードはそれ自体がリストからできている。その結果、LISPプログラムはソースコードをデータとして操作することができ、プログラマーは、マクロ・システムで新しい構文やLISP埋め込みの新しいDSLを作成できる。 コードとデータの互換性は、LISPにそのすぐに認識できる構文を与える。すべてのプログラム・コードはS式または入れ子のリストとして書かれる。関数呼び出しまたは構文は先頭が関数または演算子の名前で、その続きが引数であるリストとして書かれる。具体的には、3つの引数を取る関数fは、(f arg1 arg2 arg3)として呼び出される。.

新しい!!: 関数オブジェクトとLISP · 続きを見る »

Perl

Perl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。 言語処理系としてのperlはフリーソフトウェアである。Artistic LicenseおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。UNIXやWindowsなど多くのプラットフォーム上で動作する。.

新しい!!: 関数オブジェクトとPerl · 続きを見る »

Prolog

Prolog(プロログ)は、非手続き型プログラミング言語の一つ。論理型言語に分類される。名称は、「論理を使ったプログラミング」を意味するフランス語「programmation en logique」に由来しているRobert Kowalski.

新しい!!: 関数オブジェクトとProlog · 続きを見る »

Python

Python(パイソン)は、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。.

新しい!!: 関数オブジェクトとPython · 続きを見る »

Ruby

Ruby(ルビー)は、まつもとゆきひろ(通称 Matz)により開発されたオブジェクト指向スクリプト言語であり、スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。 また日本で開発されたプログラミング言語としては初めて国際電気標準会議で国際規格に認証された事例となった。.

新しい!!: 関数オブジェクトとRuby · 続きを見る »

RubyKaigi

RubyKaigi(ルビーかいぎ)とは、日本で開催されているRubyコミュニティ主催のオブジェクト指向プログラミング言語Rubyに関する年次イベントである。名称は過去何度か変遷しており、2013年からは通称であったRubyKaigiが正式名称として用いられている。.

新しい!!: 関数オブジェクトとRubyKaigi · 続きを見る »

Scheme

Scheme(スキーム)はコンピュータ・プログラミング言語 Lispの方言のひとつで、静的スコープなどが特徴である。仕様(2017年現在、改7版まで存在する)を指すこともあれば、実装を指すこともある。Schemeにより、Lisp方言に静的スコープが広められた。.

新しい!!: 関数オブジェクトとScheme · 続きを見る »

Smalltalk

Smalltalk(スモールトーク)は、Simula のオブジェクト(およびクラス)、LISPの徹底した動的性、LOGO のタートル操作や描画機能に、アラン・ケイの「メッセージング」というアイデアを組み合わせて作られたクラスベースの純粋オブジェクト指向プログラミング言語、および、それによって記述構築された統合化プログラミング環境の呼称。 Smalltalk で一語であり、「Small Talk」「SmallTalk」などは誤りである。 大規模な開発実績としてはCargill Lynx Projectがあり、国産製品の開発実績としてはMCFrameがある。.

新しい!!: 関数オブジェクトとSmalltalk · 続きを見る »

Standard ML

Standard ML (SML) は、プログラミング言語MLの標準ないし1方言である。The Definition of Standard ML で型付け規則と操作的意味論が与えられている。1990年に初版が出版され、1997年に単純化された改版が出版されている。.

新しい!!: 関数オブジェクトとStandard ML · 続きを見る »

Standard Template Library

Standard Template Library (STL) は、プログラミング言語C++の規格で定義された標準ライブラリの一つ。ヒューレット・パッカード社在籍の研究者(当時)であったアレクサンドル・ステパノフ等によって考案され、後にANSI/ISO標準に組み込まれた。.

新しい!!: 関数オブジェクトとStandard Template Library · 続きを見る »

Strategy パターン

Strategy パターンは、コンピュータープログラミングの領域において、アルゴリズムを実行時に選択することができるデザインパターンである。 ポリモーフィズムを持たないようなプログラミング言語では、このパターンによって解決される問題は、関数ポインタや委譲を使った記述によりリフレクションの形態で扱われる。 このパターンは、関数が第一級オブジェクトである言語では暗黙のうちに使用されている。例として Python コード を参照のこと。 Strategy パターンは、アプリケーションで使用されるアルゴリズムを動的に切り替える必要がある際に有用である。Strategy パターンはアルゴリズムのセットを定義する方法を提供し、これらを交換可能にすることを目的としている。Strategy パターンにより、アルゴリズムを使用者から独立したまま様々に変化させることができるようになる。.

新しい!!: 関数オブジェクトとStrategy パターン · 続きを見る »

ここにリダイレクトされます:

ファンクタ

出ていきます入ってきます
ヘイ!私たちは今、Facebook上です! »