Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

F#で遊んでみる(3)

やっとコードを書く。まずは、この本の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

関数宣言は、実はこの表記を略しただけらしい。個人的にはこっちの方が見やすく感じるなあ。まあ、慣れかな。