F Sharp

本来の表記は「F#」です。この記事に付けられたページ名は技術的な制限または記事名の制約により不正確なものとなっています。 F#（エフ シャープ）はマイクロソフトが開発した.NET向けのマルチパラダイムプログラミング言語である。Visual Studio 2010より標準開発言語として追加された。 2002年からマイクロソフトリサーチのドン・サイム（英語版） (英: Don Syme) ら によってOCamlをベースに開発が始められた。 OCamlから多くの要素を引き継いだ関数型とオブジェクト指向のマルチパラダイムである。型安全であり、型推論の機能をもつ。ただし、オーバーロードをサポートしているため、OCamlのもつ型推論の完全性を失っている。C#やVisual Basic .NETなどの.NET言語と相互運用性があり、.NETクラスライブラリの利用・開発が可能であり、MonoおよびXamarinを利用したAndroidアプリケーション開発もサポートされている。以前はSilverlightを利用したWindows Phone 7のアプリケーション開発もサポートされていた。 F#のFはFunctional programming language（関数型プログラミング言語）およびSystem Fが由来 である。 F#の開発環境はVisual Studioの有償版製品（あるいは無償のCommunityエディション）にVisual F#として含まれているほか、Expressエディションで利用可能な無償ツールの配布もされている。Visual F# Tools 4.1でRoslynコンパイラ（英語版）をサポートするようになった。また、Monoや.NET Core環境向けにもF#コンパイラが移植されているため、macOSやLinuxなどでもF#プログラムの開発および実行ができる。 OCaml互換の標準ライブラリを備えており、F#とOCamlのどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などはF#とOCamlで異なっている。 OCamlと互換性のある冗語構文 (英: verbose syntax) と、Pythonのようなインデント（オフサイドルール）による軽量構文 (英: lightweight syntax) の二種類の構文を利用できる。標準では軽量構文が有効になっている。 (* これはコメント *) // 1行コメント。 (* Hello world プログラム *) printfn "Hello World!" let rec factorial n = match n with | 0 -> 1 | _ -> n * factorial (n - 1) (* int リストの要素を再帰的にプリントする *) let rec printList lst = match lst with | [] -> () | h :: t -> printf "%d\n" h printList t (* 上と同様だが任意の型の要素をプリントする *) let rec printList2 l = match l with | [] -> () | h :: t -> printfn "%A" h printList2 t (* match の代りに function 式を利用する *) let rec printList3 = function | [] -> () | h :: t -> printfn "%A" h printList3 t (* 高階関数を利用する *) let printlist4 lst = List.iter (printfn "%A") lst (* フィボナッチ数列 *) let rec fib n = match n with | 0 | 1 -> n | _ -> fib (n - 1) + fib (n - 2) (* 遅延再帰シーケンス式によるフィボナッチ数列 *) let rec fibs = Seq.cache <| seq { yield! [1; 1] for x, y in Seq.zip fibs <| Seq.skip 1 fibs -> x + y } (* 遅延無限シーケンスによるフィボナッチ数列 *) let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (1,1) (* 偶数のフィボナッチ数をプリントする *) [1 .. 10] |> List.map fib |> List.filter (fun n -> (n % 2) = 0) |> printList (* 同じことをシーケンス式を利用する *) [ for i in 1..10 do let r = fib i if r % 2 = 0 then yield r ] |> printList (* フォームの作成 *) open System.Windows.Forms let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#") (* フォーム テキストを決める *) let x = 3 + (4 * 5) do form.Text <- (if x = 23 then "Correct!" else "incorrect") IronJS [脚注の使い方] ^ “Announcing .NET 8”. .NET Blog (2023年11月14日). 2024年1月18日閲覧。 ^ “F# at Microsoft Research”. Microsoft. 2016年8月26日閲覧。 ^ a b Chris Smith 2008, p. VII, まえがき. ^ Chris Smith 2008, p. 23, 2章 基本事項. ^ Chris Smith 2008, p. 383, 付録 B F#の相互運用性. ^ Chris Smith 2008, p. 8, 1章 F#の紹介. ^ “Xamarin.Android - Xamarin”. Microsoft. 2019年9月15日閲覧。 ^ “The A-Z of programming languages: F#”. en:Network World by IDG. 2016年8月26日閲覧。 ^ “Download Microsoft F#, August 2010 Community Technology Preview from Official Microsoft Download Center”. Microsoft. 2015年5月28日閲覧。[リンク切れ] ^ “Download F# Tools for Visual Studio Express 2012 for Web from Official Microsoft Download Center”. Microsoft. 2015年5月28日閲覧。 ^ “Announcing Visual F# Tools 3.1.1, with support for Desktop and Web express - Visual F# Tools Team Blog - Site Home - MSDN Blogs”. Microsoft. 2015年5月28日閲覧。 ^ “Announcing the release of Visual F# Tools 3.1.2 - Visual F# Tools Team Blog - Site Home - MSDN Blogs”. Microsoft. 2015年5月28日閲覧。 ^ “Use F# on Linux”. F# Software Foundation. 2019年9月15日閲覧。 ^ “Get started with F# with command-line tools”. Microsoft. 2019年9月15日閲覧。 Chris Smith 著、鈴木幸敏 訳、頃末和義 編『プログラミングF#』（初版）オライリー・ジャパン、2008年8月。ISBN 978-4-87311-466-8。  C# OCaml 関数型プログラミング言語 The F# Software Foundation Microsoft Research - F# Try F# Don Syme's WebLog on F# and Other Research Projects