[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

F# 単語

26件

エフシャープ

3.4千文字の記事
  • twitter
  • facebook
  • はてな
  • LINE

概要

F#(エフシャープ)とは関数型プログラミング言語の一種である。マイクロソフトリサーチ[1]で生まれ、.NET 言語に仲間入りした。 ML、OCaml といった関数型言語の流れをむ静的型付けコンパイラの言語であり、関数型言語ではあるがオブジェクト指向言語としての特徴を合わせ持つ。

コード記法が2種類用意されており、デフォルトでは軽量構文[2]lightweight syntax)だが OCaml 冗語構文(verbose syntax)を選択することもできる。関数型言語とはいえ .NET Framework に対応したオブジェクト指向言語でもあるので、C# などのようにクラスを用いたコード記述表現を模したプログラミングも可である(もちろん GUI を用いることも可)。

F# ではコンパイラ型推論により、変数関数定義においてが文脈から自動的に決まるのであれば宣言を省略できる。型推論に頼らず明示的に定することもできる。変数は基本的に不変(immutable)であるが、書き換え可(mutable)な変数として定義することもできる。

F# は正格評価を行う言語であるが、シーケンス(F# におけるリストの類似機[3])など一部の式評価においては遅延評価が行われる。明示的に定すれば任意の式を遅延評価の対とすることができる。

また、スレッド間の排他制御などマルチスレッド処理特有の問題への対策をカプセル化し、並列処理のコード記述をシンプル可読性の高いものにするために、他の.NET言語にない独特の構文表記方法とライブラリが用意されている。

F# は .NET Framework 上で動作する言語として作られているため他の .NET 言語と混在させたソフトウェア開発が可である。例えばC#で作られたライブラリをF#から利用したり、またその逆にも対応できるといったように.NET言語間の相互運用性が確保されている。

加えて、F#には、あたかもインタプリタ言語のようにコマンドライン入力したコードを即実行できる環境「F# Interactive」が用意されている(コードはまずコンパイルされてから実行される)。この機によりF#をスクリプト言語として活用することもできる。

Windows 向けの統合開発環境 VisualStudio シリーズの「VisualStudio 2010」以降、F# によるプログラミング環境が標準で搭載されている[4]

コード例

// Hello, World! の例  ←先頭の「//」記号はこの行がコメントであることを表す
[<EntryPoint; System.STAThread>]
do
printfn "Hello, World!"
// .NET Frameworkクラスライブラリを直接利用した Hello, World! の例
[<EntryPoint; System.STAThread>]
do
System.Console.WriteLine("Hello, World!")
// a 、b 共にstring の値として定義される
let a = "Hello"      // 型推論により a は string に自動的に決まる
let b : string = "Hello"   // 識別子の後ろに名を書いて定することも可
// 引数 x と y を足した値を返す関数 add (各引数の間はコンマではなくスペースで区切る)
let add x y = x + y
// 関数 add に引数を適用した例(評価結果は3となる) add 1 2
// 明示的に定を行う場合(intのxとyを足して、返り値もintを返す関数として定)
let add2 (x : int) (y : int) : int = x + y
// 引数 x 、 y、 z を全て足した値を返す関数
// 「fun」の後ろに仮引数を並べ、「->」記号の後ろに式を書く)

fun x y z -> x + y + z

// 上記の式に引数を適用した例(評価結果は6となる)
(fun x y z -> x + y + z) 1 2 3
// 関数定義その1
  // 再帰呼び出しを使って階乗 n ! を計算 // 再帰呼び出しする関数には let の後に rec を必ず付ける let rec fact1 n = match n with     // パターンマッチ構文 | 1 -> 1  // n が1なら1を返す | _ -> n * fact1 (n - 1) // n が1以外なら再帰呼び出し

// 関数定義その2 // 末尾再帰[5]を使って階乗 n ! を計算 let fact2 n = let rec fact2sub n acc = match n with | 1 -> acc           // n が1になったら計算結果を返す | _ -> fact2sub (n - 1) (acc * n) // 再帰呼び出し(末尾再帰 let result = fact2sub n 1 result // 返り値

// 関数定義その3 // 手続き型プログラミングに階乗 n ! を計算 let fact3 n =
let mutable result = 1 // mutable 定により値書き換えを許可する
for i in 1..n do    // for ループ、i は1から n まで変化
result <- result * i  // mutable で定義された値を書き変えるには「<-」記号を使う

result // 返り値

// 関数定義その4 // 1から n までのリストみ込み関数 fold を使って階乗 n ! を計算 let fact4 n = List.fold (fun acc x -> acc * x) 1 [ 1..n ]
// まず、C#コード
var v = System.Linq.Enumerable.Range(1, 100)   // 1から100までの整数集合から .Where(x => (x % 3) == 0)  // 3で割り切れる要素を選び出し .Select(x => x * 2) // 各要素を2倍して .Sum(); // 全て足し合わせる
// C#LINQを使った場合 var v = (from x in System.Linq.Enumerable.Range(1, 100) // 1から100までの整数集合から where (x % 3) == 0 // 3で割り切れる要素を選び出し select x * 2 // 各要素を2倍して ).Sum(); // 全て足し合わせる // F#で上記と同様の処理を行うコードの例
// F#でパイライン演算子「|>」を使った場合 let v = seq{1..100} // 1から100までの整数の集合から |> Seq.where (fun x -> (x % 3) = 0) // 3で割り切れる要素を選び出し |> Seq.map (fun x -> x * 2) // 各要素を2倍して |> Seq.sum // 全て足し合わせる

// F#でクエリー式を使った場合 let v = query { for x in 1..100 do // 1から100までの整数集合から where (x % 3 = 0) // 3で割り切れる要素を選び出し sumBy (x * 2) // 各要素を2倍して、全て足し合わせる }

関連動画

F#に関連する動画をご紹介ください。

関連商品

関連項目

脚注

  1. *マイクロソフト社の研究機関
  2. *HaskellPython のようにインデントの深さでスコープを表現し、冗語構文よりも必要な予約語の数を少なくできる。
  3. *正格評価が基本の F# では Haskell などと違いサイズが巨大でメモリ上に展開できないリストは作れない。このような場合は F# では「シーケンス(Sequence)」を用いる。無限リストのような遅延評価が必要な場合リスト代替品としてシーケンスを利用することになる。
  4. *ただし、「VisualStudio 2013」の時点では、Windowsフォームデザイナがない・リソース編集ツールがない等、他の.NET言語ほどには開発支援がまだ整っていない。それらを利用する場合はC#など他の言語のプロジェクトを混在させて間接的に利用する形をとることになるだろう。
  5. *F# では関数の末尾再帰最適化が行われ、関数呼び出し時のスタック消費も抑えられる。
この記事を編集する

掲示板

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
白銀ノエル[単語]

提供: 夏蜜柑

もっと見る

急上昇ワード改

最終更新:2024/12/26(木) 00:00

ほめられた記事

最終更新:2024/12/25(水) 23:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP