学習の記録−10

アクティブパターン

パターンとして使用できる関数を定義する機能。あくまで関数。

let (|Even|Odd|) n = if n % 2 = 0 then Even else Odd
let evenOrOdd n = 
    match n with
    | Even -> printfn "%d is Even" n
    | Odd  -> printfn "%d is Odd" n
> evenOrOdd 2;;
2 is Even
val it : unit = ()
> evenOrOdd 3;;
3 is Odd
val it : unit = ()

モジュール

準備(カレントディレクトリの変更)

F# interactive:how to display/change current working directory - Stack Overflowによると、以下のように書けばカレントディレクトリを見たり変更したりできる。

> open System;;
> Environment.CurrentDirectory;;
val it : string =
  "C:\Documents and Settings\Administrator\Local Settings\Temp"
> Environment.CurrentDirectory <- @"C:\Documents and Settings\Administrator\My Documents\visual studio 2010\Projects\ConsoleApplication16\ConsoleApplication16";;
val it : unit = ()
> Environment.CurrentDirectory;;
val it : string =
  "C:\Documents and Settings\Administrator\My Documents\visual studio 2010\Projects\ConsoleApplication16\ConsoleApplication16"
モジュールの作成

以下の内容を"Script1.fsx"として保存しておく。

module MyMath = 
    let MyAdd x y = x + y

これをF# Interactive上で使用してみる。まずはモジュールのロード

> #load "Script1.fsx";;
[Loading c:\documents and settings\administrator\my documents\visual studio 2010\Projects\ConsoleApplication16\ConsoleApplication16\Script1.fsx]

namespace FSI_0009
  module MyMath = begin
    val MyAdd : int -> int -> int
  end

実際に使用するにはファイル名.モジュール名.関数名で指定して使う。

> Script1.MyMath.MyAdd 1 3;;
val it : int = 4

いちいちScript1書くのはめんどいんでopenしておくとよい。MyMathも省きたい時はそこまで含めてopenしてしまう。

> open Script1;;
> MyMath.MyAdd 1 3;;
val it : int = 4
> open Script1.MyMath;;
> MyAdd 1 3;;
val it : int = 4

スクリプトファイルではなく、ソースファイル(.fs)で作って、それをコンパイルしてDLLにしてから参照すれば上と同じように使用することができる。