5. 変数
letで宣言できる。
基本的に値は変更できない。
代入することを「束縛」という。
> let a = 1;;
val a : int = 1
> a <- 2;; // <- は代入の演算子
a <- 2;;
^^^^^^
stdin(7,1): error FS0027: この値は変更可能ではありません
8. 2つ以上の引数を渡すには?
関数の引数に関数を渡せばよい
> let f = (fun x -> (fun y -> x + y));;
val f : x:int -> y:int -> int
> f 10;;
val it : (int -> int) = <fun:it@2>
> f 10 20;;
val it : int = 30
9. 省略形
let f = (fun x -> (fun y -> (fun z -> x + y + z)));;
let f = fun x y z -> x + y + z;;
let f x y z = x + y + z;;
どれも同じ関数である。
10. パターンマッチ
お馴染みのFizzBuzz
if文で書いてみると以下のようになる。
let FizzBuzz1 num =
if num % 3 = 0
&& num % 5 = 0 then "FizzBuzz"
elif num % 3 = 0 then "Fizz"
elif num % 5 = 0 then "Buzz"
else string num
11. これをパターンマッチで書くと…?
let FizzBuzz2 num =
match num with
| x when x%3 = 0 && x%5 = 0 -> "FizzBuzz"
| x when x%3 = 0 -> "Fizz"
| x when x%5 = 0 -> "Buzz"
|_ -> string num
// アンダーバー(_)はワイルドカード
スッキリした形で記述できる。
12. タプルを使うと更にスッキリする
let FizzBuzz3 num =
match (num%3, num%5) with
|(0, 0) -> "FizzBuzz"
|(0, _) -> "Fizz"
|(_, 0) -> "Buzz"
|_ -> string x
13. パターンマッチの魅力
すべてのパターンに到達可能かどうか、またすべての
パターンを網羅しているかを事前に警告してくれる。
> let FizzBuzz3 x =
match (x%3, x%5) with
|(0, 0) -> "FizzBuzz"
|(0, _) -> "Fizz"
|(_, 0) -> “Buzz“
FizzBuzz.fs(18,16): warning FS0025: この式のパターン マッチが不
完全です たとえば、値 '(1,1)' はパターンに含まれないケースを示
す可能性があります。
val fb : x:int -> string
17. 手順
Visual Studio 2010 Professionalをインストール
→プロジェクトのテンプレートが2010のみ対応のため
Visual Studio 2010 Service Pack 1 をインストール
http://www.microsoft.com/ja-jp/download/details.aspx?id=23691
Microsoft Silverlight 4 Tools for Visual Studio 2010 をインストール
http://www.microsoft.com/ja-jp/download/details.aspx?id=18149
Windows Phone SDK 7.1 と SDK7.1.1更新プログラムをインストール
http://www.microsoft.com/ja-jp/download/details.aspx?id=27570
http://www.microsoft.com/ja-jp/download/details.aspx?id=29233
開発テンプレート F# and C# Win Phone App (Silverlight) をインストール
http://visualstudiogallery.msdn.microsoft.com/17454c58-c1d9-4640-afe1-7943db13891e/
18. 手順
ファイル→新規作成→プロジェクト
Visual F#→WP7→F# and C# Windows Phone Application
(Silverlight)を選択
作成して実行してみる
19. ここで問題発生
以下のようなエラーが出る
F# runtime for Silverlight version v4.0 is not installed.
Please go to http://go.microsoft.com/fwlink/?LinkId=177463
to download and install matching F# runtime
F# for Silverlight Runtime がインストールされていない
Microsoft Silverlight 4 Tools for Visual Studio 2010 に含ま
れてるはずなのに・・・
20. 仕方ないので
Microsoft Silverlight 4 Tools for Visual Studio 2010 の
実行ファイルからF# for Silverlight Runtime のインス
トーラを取り出して実行
Explzhを使って取り出した
http://www.ponsoftware.com/
FSharpRuntimeSL4.msi を実行