最近更新した記事
各種統計値
ユーザーID:
3225219総レス数:
2868(第920位)総編集数:
1837(第181位)総お絵カキコ数:
140(第200位)総新規記事数:
80(第530位)総ピコカキコ数:
0(第2140位)![]() |
ここは他所で記事を書く準備・練習・実験用の場所として利用させていただいております。 |
F#(エフシャープ)とは関数型プログラミング言語の一種である。マイクロソフトリサーチ[1]で生まれ、.NET 言語の一つとなった。 ML、OCaml といった関数型言語の流れを汲む静的型付けコンパイラ型の言語であり、関数型言語ではあるがオブジェクト指向型言語としての特徴を合わせ持つ。
コード記法が2種類用意されており、デフォルトでは軽量構文[2](lightweight syntax)だが OCaml 風の冗語構文(verbose syntax)を選択することもできる。関数型言語とはいえ .NET Framework に対応したオブジェクト指向型言語でもあるので、C# などのようにクラスを用いたコード記述表現をほぼそのまま模したプログラミングも可能である(もちろん GUI を用いることも可能)。
F# ではコンパイラの型推論機能により、変数・関数の定義において型が文脈から自動的に決まるのであれば型宣言を省略できる。型推論に頼らず明示的に型指定を行うこともできる。変数[3]は基本的に不変(immutable)であるが、書き換え可能(mutable)な変数として定義することもできる。
F# は正格評価を行う言語であるが、シーケンス(F# におけるリストの類似機能[4])など一部の式評価においては遅延評価が行われる。明示的に指定すれば任意の式を遅延評価の対象とすることができる。
また、スレッド間の排他制御などマルチスレッド処理特有の問題への対策をカプセル化し、並列処理のコード記述をシンプルで可読性の高いものにするためのライブラリを標準で持っている。
F# は .NET Framework 上で動作する言語として作られているため他の .NET 言語と混在させたソフトウェア開発が可能である。例えばC#で作られたライブラリをF#から利用したり、またその逆にも対応できるといったように.NET言語間の相互運用性が確保されている。
Windows 向けの統合開発環境 VisualStudio シリーズの「VisualStudio 2010」以降、F# によるプログラミング環境が標準で装備されている[5]。無償の開発環境も提供されており、「Visual Studio Express 2012 for Web」に F# 開発用のアドイン「F# Tools for Visual Studio Express 2012 for Web」をそれぞれインストールすれば F# のプログラミング環境が整う。
// 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 に引数を適用した例 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
// 上記の式に引数を適用した例
(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 // 末尾再帰を使って階乗 n ! を計算 let fact2 n = let rec fact2sub n acc = match n with | 1 -> acc | _ -> 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 fact5 n = List.fold (fun acc x -> acc * x) 1 [ 1..n ]
': :/: : : : : : : : : : : :/\: : : ヽ /.:::::::::::::::::::::::::::::::::::::::::::::.\ l: :l: : : : : : : : : :> '´ ヽ : : ', /::::/l:::::::::::::::::::::::::::::::::::::::::::::::::::ヽ |: :|: : : : :/: :/ u 、__ ',: : :| ':::::/x::::/:/::::::/::::::::::::::::::::::::::::::::::::l : :!: : : : l:∠==ミァ'´ ィ行Y |: : :! l:::://::メ /::::::/::::::::::::::::::::::::::::::::::::::| Vハ: : : :!/::廴ノ} {:Lノ| ;: : / ∨刈ーイ::::::::|::::::::::::::::::::::::::::::::::::::::j r=/^X: : { V::0:ノ V0ノ/:/ _,ノ |(./∨::::::::|:::::::::::::::::::::::::::::::::::::::/ { / `\ ' ' ヽ ''/イ⌒ヽ ) |リ |:::::::::|⌒ヽ:::::::::::::::::::::::::::::{ なんでつぼみだけ // {丶-\ __ /: :\ノ 丶ヘ , , |:::::::::|´ |::::::::::::::::::::::::::::::丶-- 、 スマプリに出てんの? ./: : :{: :ゝ--'^¨> く __)ノ イ: :\: :\ (| !:::::::::!__,ノ:::::::::::::::::::::::::::::::::::::::::::::} : : :/:/ ノ ̄〉 L \_l: : : : \: : 〈 ,:::::::::::| ヽ::::::::::::::::::::::::::::::::::::::::::::::/ そ、それはですねぇ… : :/: :/ r‐<^ 、 〈,- -| | 厂Y
総お絵カキコ数と枚数が一致しないのは、主に一時保存の回数が多すぎるため orz
すべて元絵(版権絵)ありの模写 orz
動画の鑑賞よりも専ら大百科の閲覧・編集に熱中しているため、単語記事向けの素材として描くことが多い
※FireFoxで表示すると下のボタンやQRコードの表示位置が乱れることがあります
掲示板
急上昇ワード改
最終更新:2025/12/24(水) 18:00
最終更新:2025/12/24(水) 18:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。