読者です 読者をやめる 読者になる 読者になる

プログラミングの基礎(真偽値を返す関数)

プログラミングの基礎は購入していました。

ただ、ずっと手づかずだったのですが、GW中に少しやっていました。

プログラミングの基礎ではocamlを使います。

ocamlの特徴として、rubyと異なっているなと感じた点です。

型変更はできない

これは大きな違いだなと思いました。

ただし、型変更ができないおかげで、厳格な式を書かないといけなくなります。

そういう意味では、全然ありだなと思いました。

式の目的を見失わないために、デザインレシピを用いることになります。

これは俗に言う、TDDではないのか?と思いました。

新しい視点が手に入るので、全く異なる言語を学ぶのはいいですね。

今はプログラミングの基礎の真偽値を返す関数についてまで進みました。

条件分岐の構文について、自分の備忘録のために記入します。

条件分岐の構文

  • 条件はbool型でなくてはならない
  • 二つの式は同じ型を持たなくてはならない

上記の特徴があります。

問題の5-3まで行きましたので、自分なりの答えを貼っておきます。

 (*目的:誕生日(月と日)を受け取ったら、星座を返す関数星座  *)
(* seiza : int -> int -> string*)
let seiza m d =
  if m = 3 && 20 < d || m = 4 && 1 <= d && d < 21 then "牡羊座" else
  if m = 4 && 20 < d || m = 5 && 1 <= d && d < 21 then "牡牛座" else
  if m = 5 && 20 < d || m = 6 && 1 <= d && d < 22 then "双子座" else
  if m = 6 && 21 < d || m = 7 && 1 <= d && d < 24 then "蟹座"   else
  if m = 7 && 23 < d || m = 8 && 1 <= d && d < 24 then "獅子座" else
  if m = 8 && 23 < d || m = 9 && 1 <= d && d < 24 then "乙女座" else
  if m = 9 && 23 < d || m = 10 && 1 <= d && d < 24 then  "天秤座" else
  if m = 10 && 23 < d || m = 11 && 1 <= d && d < 23 then "蠍座" else
  if m = 11 && 22 < d || m = 12 && 1 <= d && d < 23 then "射手座" else
  if m = 12 && 22 < d || m = 1 && 1 <= d && d < 21 then "山羊座" else
  if m = 1 && 20 < d || m = 2 && 1 <= d && d < 20 then "水瓶座" else "魚座"

(*テスト*)
let test1 = seiza 1 23 = "水瓶座"
let test2 = seiza 1 21 = "水瓶座"
let test3 = seiza 2 19 = "水瓶座"
let test4 = seiza 2 20 = "魚座"
let test5 = seiza 2 23 = "魚座"
let test6 = seiza 3 20 = "魚座"
let test7 = seiza 3 21 = "牡羊座"
let test8 = seiza 3 22 = "牡羊座"
let test9 = seiza 4 20 = "牡羊座"
let test10 = seiza 4 21 = "牡牛座"
let test11 = seiza 4 22 = "牡牛座"
let test12 = seiza 5 20 = "牡牛座"
let test13 = seiza 5 21 = "双子座"
let test14 = seiza 5 22 = "双子座"
let test15 = seiza 6 21 = "双子座"
let test16 = seiza 6 22 = "蟹座"
let test17 = seiza 6 23 = "蟹座"
let test18 = seiza 7 23 = "蟹座"
let test19 = seiza 7 24 = "獅子座"
let test20 = seiza 7 25 = "獅子座"
let test21 = seiza 8 23 = "獅子座"
let test22 = seiza 8 24 = "乙女座"
let test23 = seiza 8 25 = "乙女座"
let test24 = seiza 9 23 = "乙女座"
let test25 = seiza 9 24 = "天秤座"
let test26 = seiza 9 25 = "天秤座"
let test27 = seiza 10 23 = "天秤座"
let test28 = seiza 10 25 = "蠍座"
let test29 = seiza 11 20 = "蠍座"
let test30 = seiza 11 22 = "蠍座"
let test31 = seiza 11 23 = "射手座"
let test32 = seiza 11 24 = "射手座"
let test33 = seiza 12 22 = "射手座"
let test34 = seiza 12 23 = "山羊座"
let test35 = seiza 1 19 = "山羊座"
let test36 = seiza 1 20 = "山羊座"