スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#文法リファレンス - ラムダ式(無名関数 / 匿名関数)

概要
 ラムダ式と呼ばれる名前がない関数を定義することができます。

使用に適した状況
 局所的にしか使用しない関数を定義したいときや、関数値を定義したいときに使用します。

サンプル

(*----------------------------------------------

    ラムダ式( 無名関数 / 匿名関数 )

----------------------------------------------*)
let add = fun x y -> x + y
let x = 1
let y = 2
printfn "%d + %d = %d" x y <| add x y


文法
 funキーワード、パラメータ、->演算子、本体の順番に記述します。

解説
 プログラミングでは、ループ内でしか使用しないカウンタ用のローカル変数などのように、局所的にしか使用したくないものがあります。同じ発想で、関数型言語であるF#は、局所的に使用する関数を定義することができます
 プログラミングに慣れていない人は、名前がないという事と、局所的という事柄を関連付けて考えにくいと思います。その意味を知るには、名前とは何かを考えなくてはなりません。
 名前というものは何を意味するのでしょうか?名前が意味するところは広く、哲学的に色々な物事が考えられると思いますが、プログラミングでは主に実用面を考えます。実用面から名前を考えると、何かの要素を特定するものだといえます。例えば、アクセス修飾子の問題を考えなければ、加算関数Addは名前を知っていれば他の場所から呼び出せます。ということは、名前がなければ呼び出せないという事でもあります。つまり、プログラミングにおいて、名前がない要素は、他の場所から使用させないという事を表わしています。
 関数型プログラミングに慣れてい居ない人は、他の場所から呼び出す必要がない関数というものをイメージし難いと思います。ですが実は難しいものではなく、簡単かつありふれたものです。
 プログラミングをしていると、関数が複雑になり、プログラムを短く簡潔にするためにヘルパー関数を定義することがあります。そうしてできたヘルパー関数をよく考えると、特定の関数だけしか必要とされていないことが多いです。このヘルパー関数をそのままにしておくと、結果として名前付きで定義された関数の数が増えるので、保守作業にあたっているプログラマーの負担になるかもしれません。もしその時、無名関数であったならば、保守作業をしているプログラマーは、ひとまず注目する必要がない関数だと分かり、読むコードの量を減らせます。
 ほかの用途ももちろんあります。それは高階関数です。高階関数で関数値を返す時、呼び出した側が関数値を名前で束縛するので、名前を付ける必要がありません。そこで返す関数を無名関数にするケースが多いです。
 無名関数は地味な文法ですが、他の文法と組み合わせることにより、プログラム全体の表現力を上げます。また、無名関数を適切に使用すると保守性が向上します。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

小林さん、こんにちは。
コメントで読み取れる情報からは、誰がどういう理由で意思決定したのかわかりませんし、課長さんの言動がわかりませんので、一般論しか言えません。
ですから、今から言う事は一般論です。

普段通りに振舞えばいいと思います。
課長が発案者かもしれませんので、下手にその件について言及すると、何かされる可能性があります。
また、何らかの被害を受けているかもしれませんので、古傷に触れるようなことをする必要はないと思います。

それと、今度は契約更新されない可能性が大いにあります。
それは覚悟しておいた方がいいです。
万が一の場合は「あの時切られた契約が伸びてよかった。」というふうに、前向きに考えるとよいと思います。
小林さん、ファイト!

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: ありがとうございます

どういたしまして。
ブラック会社では常套手段なのであり得ます。
ですが、さほど気にする必要はないと思います。
何故ならば、そんな噂を真に受ける会社に碌な会社はありませんし、普通の会社は相手にしないからです。
日本の法律がその手の事に弱いので、個人が強くしたたかになるしかないのです。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。