eukaryoteさんのページ

eukaryoteユーザー

  • 22
  • 0pt
掲示板へ

自作自演記事というか練習 ここは他所で記事を書く準備・練習実験用の場所として利用させていただいております。

概要

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!")
  • let 式を用いた値の定義
// a 、b 共にstring の値として定義される
let a = "Hello"      // 型推論により a は string に自動的に決まる
let b : string = "Hello"   // 識別子の後ろに名を書いて定することも可
  • let 式を用いた関数の定義
// 引数 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 ]

関連動画

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

関連商品

関連項目

AAの表示例

    ': :/: : : : : : : : : : : :/\: : : ヽ     /.:::::::::::::::::::::::::::::::::::::::::::::.\
    l: :l: : : : : : : : : :> '´    ヽ : : ',   /::::/l:::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
    |: :|: : : : :/: :/  u   、__  ',: : :|   ':::::/x::::/:/::::::/::::::::::::::::::::::::::::::::::::l 
     : :!: : : : l:∠==ミァ'´   ィ行Y |: : :!  l:::://::メ /::::::/::::::::::::::::::::::::::::::::::::::|
    Vハ: : : :!/::ノ}     {:Lノ| ;: : /   ∨刈ーイ::::::::|::::::::::::::::::::::::::::::::::::::::j
   r=/^X: : { V::0:ノ    V0ノ/:/  _,ノ |(./∨::::::::|:::::::::::::::::::::::::::::::::::::::/    
   { / `\ ' '     ヽ ''/イ⌒ヽ )   |リ  |:::::::::|⌒ヽ:::::::::::::::::::::::::::::{     なんでつぼみだけ
  // {-\    __   /: :\ノ ヘ   , , |:::::::::|´  |::::::::::::::::::::::::::::::-- 、  スマプリに出てんの?
./: : :{: :ゝ--'^¨> く __)ノ イ: :\: :\ (|     !:::::::::!__,ノ:::::::::::::::::::::::::::::::::::::::::::::} 
: : :/:/   ノ ̄〉  L \_l: : : : \: : 〈   ,:::::::::::| ヽ::::::::::::::::::::::::::::::::::::::::::::::/   そ、それはですねぇ…
: :/: :/ r‐<^ 、 〈,-  -|  | Y 

静画をクリッピングして引用

動画画像サムネに動画へのリンクを入れる

このユーザが描いたお絵カキコ一覧

お絵カキコ数と枚数が一致しないのは、に一時保存の回数が多すぎるため orz
すべて元絵(版権絵)ありの模写 orz
動画の鑑賞よりも専ら大百科の閲覧・編集に熱中しているため、単語記事向けの素材として描くことが多い

ブラウザFireFox以外だとレイアウトが崩れます。

ここの掲示板で描いたお絵カキコ

このユーザが他の記事の掲示板で描いたお絵カキコ


FireFoxで表示すると下のボタンQRコードの表示位置が乱れることがあります

 

脚注

  1. *マイクロソフト社の研究機関
  2. *HaskellPython のようにインデントの深さでスコープを表現し、冗語構文よりも必要な予約の数を少なくできる。
  3. *F# においてこれは正確には名前(識別子)をつけた「値」にすぎない。
  4. *正格評価が基本の F# では Haskell などと違いサイズが巨大でメモリ上に展開できないリストは作れない。このような場合は F# では「シーケンス(Sequence)」を用いる。限長リストのような遅延評価が必要な場合リストの代替品としてシーケンスを利用することになる。
  5. *ただし、「VisualStudio 2012」の時点では、Windowsフォームデザイナがない・リソース編集ツールがない等、他の.NETほどには開発支援がまだ整っていない。

【スポンサーリンク】

  • 22
  • 0pt
スマホ版URL:
https://dic.nicovideo.jp/t/u/3225219

この記事の掲示板に最近描かれたお絵カキコ

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

eukaryote

116 ななしのよっしん
2014/03/23(日) 23:16:49 ID: F5C/4OFKaG
うさぎ
ho
タイトル:ho
画像をクリックして再生!!
 
Twitterで紹介する

117 ななしのよっしん
2014/07/07(月) 22:03:26 ID: F5C/4OFKaG

1
タイトル:1
画像をクリックして再生!!
 
Twitterで紹介する

118 ななしのよっしん
2014/07/07(月) 23:45:55 ID: F5C/4OFKaG
-
-
タイトル:-
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する

119 ななしのよっしん
2014/07/08(火) 23:12:14 ID: F5C/4OFKaG
-
-
タイトル:-
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する

120 ななしのよっしん
2014/07/09(水) 00:49:16 ID: F5C/4OFKaG
--
--
タイトル:--
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する

121 ななしのよっしん
2014/07/09(水) 19:40:54 ID: F5C/4OFKaG
~
~
タイトル:~
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する

122 ななしのよっしん
2014/07/10(木) 23:43:02 ID: F5C/4OFKaG
1
1
タイトル:1
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する

123 ななしのよっしん
2014/07/12(土) 00:19:58 ID: F5C/4OFKaG
真中らぁら
真中らぁら
タイトル:真中らぁら
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する

124 ななしのよっしん
2014/07/23(水) 17:32:43 ID: F5C/4OFKaG
*
-
タイトル:-
画像をクリックして再生!!
 
Twitterで紹介する

125 ななしのよっしん
2014/08/02(土) 19:12:34 ID: F5C/4OFKaG
/
-
タイトル:-
画像をクリックして再生!! この絵を基にしています!
 
Twitterで紹介する