やっとコードを書く。まずは、この本の3章をざくざくやっていこう。
ちなみに、この本はちょっと古い。2010年にF#がVisual Studioに乗っかったばっかりのころ P68あたりの変数束縛のところをやってみた。
> let pi = 3.14;; val pi: float = 3.14 > let areaOfCircle = pi * r ** 2.;; let areaOfCircle = pi * r ** 2.;; ------------------------^ /Users/tambara/study/fs_study/stdin(2,25): error FS0039: 値またはコンストラクター 'r' が定義されていません。
エラーが親切だけど、コンストラクターって何だろう?
ちゃんと定義してみる。
> let areaOfCircle r = pi * r ** 2.;; val areaOfCircle: r: float -> float
これでr: float
だと決めてくれるの、何気にすごい。
rはfloatなので、当然、intをareaOfCircle関数に渡すと怒られる・・・
> areaOfCircle 5;; val it: float = 78.5
・・・と、本には書いてあったんだけどね。アレ?変わってる?
floatとintの掛け算をやってみると、これはちゃんとダメ
> 3.14 * 5;; 3.14 * 5;; -------^ /Users/tambara/study/fs_study/stdin(7,8): error FS0001: 型 'int' は型 'float' と一致しません
これはどうかな?
> let hoge f:float = f;; val hoge: f: float -> float > hoge 1;; val it: float = 1.0
これはint -> floatの変換がはいるんだね。
ラムダ式を使って関数定義をすることも出来て、こんな感じになる。
> let areaOfCircle = fun r -> - let pi = 3.14 in - pi * r ** 2.;; val areaOfCircle: r: float -> float
関数宣言は、実はこの表記を略しただけらしい。個人的にはこっちの方が見やすく感じるなあ。まあ、慣れかな。