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 を実行