第2回プログラミングの基礎読書会まとめ

2.3〜4.2まで。
別途議論した点のみ記述。

2.3

(^);; string -> string -> string =
(+);; int -> int -> int =
となり、型が違うので文字列を(+)で連結できない。

2.4

bool型の比較関数を調べると(&&)の他に(&)もある*1
(&)ってもしかして短絡評価? と思い次のコードで調べてみたが違う模様。

(print_string "hoge"; false) & (print_string "piyo"; true);;


実は比較は=と==の両方でできる*2

ここで(=)と(==)とを比較すると、

  • (=)は2変数の構造的等価性を判断する。
  • (==)は2変数の物理的等価性を判断する。


データの比較にも==を利用できるが、基本データの比較には(=)を使った方がよい。
(immutableにたいして==は実装依存)


比較は大小ではなく、順序集合の「前にある・後ろにある」という考えで行う。
データ種別の列挙タイミングで前に書くと、そのデータの方が前にあると考えられる。


'a : なんか型a
'a -> 'a -> bool : 第1引数と第2引数は等しい
似てる: JavaのComparator#compare(T o1, T o2)

float_of_int 3 = 3.
int_of_float 3. = 3

3.2

変数には一度値を設定すると書き換えられない。
「(再)代入」という言葉を使っていないことに注意。

4.2

let g1 x y = x*x + y*y - 4;;
let g2(x, y) = x*x + y*y - 4;;

書きなれない方法を使わなくても数学の関数っぽい書き方ができる。
結果的に同じ結果を出すけど、関数の型が違う。


言語によってパターンマッチが書きやすいような方式を選んでる?


関数は(=)で比較できないが、(==)で比較できる。
次のような場合はfalseを返すこともある。
(==)はそんな仕様みたい。

(not) == (not)
 -: bool = false
(==) == (==)
 -: bool = false