Getting a Good Grasp of F# (仮)

関数型言語F#をもっと楽しみたい

F# と Sodium でリアクティブ・プログラミング(2)

Sodium のCellとアキュームレータの作成 Sodium のStreamが値を持つのはイベント発生の瞬間であるのに対して、Cellはいったん獲得した値を保持できる。Cellの値は書き換え可能で、次の書き換えまでその値を保持しており、いつでも自由に読み出すことができる…

F# と Sodium でリアクティブ・プログラミング(1)

F# 向けのリアクティブ・ブログラミングには SodiumFRP.FSharp パッケージが利用できます。 Sodium においては、GUI のボタンクリックイベントやキーボードによるキー入力など何であれ、そういったイベント群をストリーム(Stream<'a>型)上に並べたデータ群…

F# クラスのプロパティ定義をシンプルに記述する

F#

メンバとして public なプロパティ Name (string 型、読み書き可)を持つ単純なクラス Person1 を C# と F# 双方で定義してみます。 [注意] F# のクラスのアクセシビリティはデフォルトで public です。同様に、メソッドやプロパティもアクセシビリティはデ…

煩雑な条件分岐を F# のコンピューテーション式で簡潔に表現する

F#

条件分岐の多い処理を、F# の Option 型とコンピューテーション式の文法を活用してコードの可読性を向上させる例を示します。 「関数プログラミング実践入門 ──簡潔で、正しいコードを書くために」《第5章 モナド / 5.4 他の言語におけるモナド》に載ってい…

開発環境メモ - VS 2019 Preview 3.0 のタイトルバーを復活させる

Visual Studio 2019 Preview 3.0 ではタイトルバーの有無を選択するメニュー項目が出来ました。 メニューバーから「 ツール → オプション → 環境 → プレビュー機能」で設定項目にたどり着けます。 タイトルバーを復活させるには、項目「コンパクトメニューと…

開発環境メモ - VS 2019 Preview 2.2 のタイトルバーを復活させる

[ 2019.06.30 追記:Visual Studio 2019 Preview 3.0 ではタイトルバーの有無を選択するメニュー項目が出来ました。 ] Visual Studio 2019 Preview 2.2 には、以前のバージョンに存在した設定項目「ツール → オプション → 環境 → Preview Features 」が存在…

WPF のバインディングソースとなるクラスを F# で作る

WPF にはデータバインディングによってオブジェクトの状態変化を別のオブジェクトへ通知する機能があります。 本記事ではバインディングソースを F# のクラスとして作り WPF コントロールと連携させます。そのために INotifyPropertyChanged インタフェース…

開発環境メモ - VS 2019 preview 起動時の挙動・外観を 2017 に近い状態に戻す

[ 2019.02.07 追記:Visual Studio 2019 Preview 2.2 で確認したところ本記事で説明している設定項目はなくなっていました。タイトルバーの設定についてはこちらの記事を参照のこと。] Visual Studio 2019 preview 版導入にあたって、起動直後の UI 設定を 2…

WPF で NumericUpDown コントロールを使う その2 [F#編]

前回 C# で実装した機能を今記事では F# で実装してみます。前回書いた XAML コードを(文字列としてですが)再利用します。 F# での実装 F# でプロジェクトの作成 F#の新規プロジェクトを作成するためにまず「コンソールアプリケーション(.NET Framework)…

WPF で NumericUpDown コントロールを使う その1 [C#編]

WPF には Spin コントロールがありません。一方で、WinForms には Spin コントロールとしての機能を持つ NumericUpDown クラス が存在します。C# で WPF の Window 上にこの NumericUpDown コントロールを配置してみます。このとき WPF に WinForms コントロ…

F# における interface 宣言と実装、そしてオブジェクト式

F#

C#には、インタフェースを宣言するためのキーワード interface が用意されていますが、 F# でのインタフェース宣言は( クラス宣言と同じく)キーワード type を用います。 C# の宣言例 public interface IGreeting { void Say(); } F# の宣言例 type IGreet…

F#からWPFのGUIを扱う 《文字列データとしてのXAMLからGUI表示へ》

以前、F#からWPFのGUIを扱う その1~その4 にて、C#プロジェクトを混在させてWPFを利用したプログラミングを行いました。今回はF#のコードだけを使ってWPFを扱ってみます。XAMLファイルは用いずにXAMLコードを F#コード内で文字列データとして持つことにしま…

VS2017 で NuGet パッケージ情報が取得できない?(トラブルシューティング)

Visual Sturdio Community 2017 (この記事時点でのバージョンは15.1 (26403.3) )をインストールした後、Nuget パッケージの情報を取得できない状態になっていることに気付きました。このままでは NuGet パッケージの検索もインストールも出来ません。その…

F#のコードをユニットテストで検証する その6 (NUnit)

NUnit を使って例外送出のテストをしてみます。以下に示すコードでは DivideByZeroException が確実にスローされることを確認するテストを実行しています。 例外送出のユニットテストの例 module UnitTestingSamples2 open NUnit.Framework open System [<Test>] l</test>…

F#のコードをユニットテストで検証する その5 (NUnit)

Visual Studio 2013 から NUnit を使ってF# コードのユニットテストを行ってみます。(F# のプロジェクトはコンソールアプリケーションのプロジェクトとして作成) プロジェクトへ必要な Nuget パッケージをインストールします。(記事作成時の NUnit のバー…

F#からWPFのGUIを扱う その4

前回(F#からWPFのGUIを扱う その3)の別解として、今度は Win32 API を直接利用せずにインターフェイス IValueConverter の実装を別の方法で試みます。 MyBitmapConverter クラスを再実装します。よって、前回のF#のコードの34~52行目を以下のコードで置き…

F#からWPFのGUIを扱う その3

WPF の Image コントロールに、動的に生成したビットマップ画像を表示させるコードを書いてみます。 生成する画像については「Windows Presentation Foundation 4.5 Cookbook」Chapter 9 : Graphics and Animation / Manipulating a bitmap programmatically…

F#からWPFのGUIを扱う その2

WPFボタンの簡単なClickイベント処理を試みます。前回作成したソリューションにコードを追加していきます。 C#のプロジェクト WpfTest にて MainWindow.xaml にボタンを追加します。XAMLデザイナーの画面でマウス操作でボタンを配置してみます。 ツールボッ…

F#からWPFのGUIを扱う その1

WPF(Windows Presentation Framework)のウィンドウをF#のコードを使って表示させてみます。XAMLの編集作業の利便性を考えてC#のプロジェクトと連携させることにします。以下の説明で使用している開発環境はVisual Studio 2013 です。 まず準備として新規の…

F#で集合を扱う その2

F#

// 名前空間:Microsoft.FSharp.CollectionsのSetモジュールについて。 Set が生成する集合オブジェクトはイミュータブル(immutable)つまり変更不可な値です。 以下のコードでAdd メソッドを呼び出していますが、1行目で生成した集合オブジェクトの内容を…

F#で集合を扱う その1

F#

F#で数学における「集合」を扱うために、名前空間:Microsoft.FSharp.Collections には Set というモジュールが用意されています。 整数0から5までの集合を作るには、 let is = Set.ofList [0..5] このコードは、整数0から5のリスト [0; 1; 2; 3; 4; 5] に S…

F#のコードをユニットテストで検証する その4(xUnit)

前回の xUnit.net を利用したユニットテストの続きです。前回とは違うやり方で、ひとつのテスト関数に複数のテストデータを渡す方法を試します。 サンプルコード その1 module Sample3 open Xunit let SampleData01 : seq<obj array> = seq [ [| ""; 0 |] [| "ab"; 2 |]</obj>…

F#のコードをユニットテストで検証する その3(xUnit)

前回と同じく Visual Studio 2013 のテストエクスプローラーから xUnit.net を使ったユニットテストを行います。今回は1つのテスト関数に複数のテストデータを渡す方法を試します。 xUnit.net を使ったコードの例 module Sample2 open Xunit let fibonacci (…

F#のコードをユニットテストで検証する その2(xUnit)

.codesnippet { border-style: solid; border-width: 1px; margin-top: 1em; margin-bottom: 2em; font-family: Consolas; font-size: 10pt; color: black; background: #fffbf0; line-height: 1.3em; } --> xUnit.net を利用してVisual Studio 2013のテスト…

F#のコードをユニットテストで検証する その1

デフォルトのVisual Studio 2013の環境で、F#のコードのユニットテストを実行してみます。以下は普通のコンソールアプリケーションのプロジェクトに含まれているコードです。Microsoft.VisualStudio.TestTools.UnitTesting名前空間を使うので、予め Microsof…

F#でなるべく簡単にグラフ表示をさせたい その4

.pre_attributes { border-style: solid; border-width: 1px; margin-top: 1em; margin-bottom: 2em; font-family: Consolas; font-size: 10pt; color: black; background: #fffbf0; line-height: 1.3em; } --> 今回はチャート・ライブラリ F# Chartingを利…

F#でリスト要素のデカルト積を求める

F#

二つのリスト [0; 1][2; 3] のデカルト積(Cartesian product)、つまり互いのリスト要素どうしのすべての組み合わせによる集合をリストで表すと [ [0; 2]; [0; 3]; [1; 2]; [1; 3] ] と表せます。また、三つのリスト [0; 1][2; 3][4; 5] ならば [ [0; 2; 4]…

F#でなるべく簡単にグラフ表示をさせたい その3

名前空間:System.Windows.Forms.DataVisualization.Chartingのクラスを使って.NET標準ライブラリのみでグラフを描いてみます。 Windowsフォーム(Formオブジェクト)に下図のような階層で必要なオブジェクトを追加していきます。 Form ChartControl ChartAr…

F#でなるべく簡単にグラフ表示をさせたい その2

F#からgnuplotを利用するためのライブラリとしてFnuPlotというのがあります。(Funplotという似た名前のソフトウェアも存在するので検索する場合は注意) FnuPlot 公式ページ:http://fsprojects.github.io/FnuPlot/ まだ(2015年11月現在)ベータ版のようで…

F#でなるべく簡単にグラフ表示をさせたい その1

グラフといってもここでは英語で言うgraphではなくchartのこと。ここではグラフ描画にオープンソース・ソフトのgnuplotを利用します。 まずはgnuplotを下記URLからダウンロードしてインストール。 http://www.gnuplot.info/(gnuplot公式ページ) GUIでグラ…