『プログラミング in OCaml』を読み始めました。
練習問題を楽しみながら解いているんだけど、その自作解答を記録しておくことにしました。
練習問題3.1
次の関数を定義しなさい。必要に応じて実数の切り捨てをおこなう関数 floor を用いなさい。
- USドル(実数)を受け取って、円(整数)に換算する関数。ただしⅠ円以下は四捨五入しなさい。
- 円(整数)を受け取って、USドル(セント以下を少数にした実数)に換算する関数。ただしⅠセント以下は四捨五入しなさい。レートは1$=114.32円とします。
- USドル(実数)を受け取って、”<ドル> dollars are <円> yen.” という文字列を返す関数。
- 文字を受け取って、アルファベットの小文字なら大文字に、その他の文字はそのまま返す関数 capitalize。(例:capitalize ‘h’)’H’、capitalize ‘1’)’1’)
(* 1 *)
(* usドル(実数)を受け取って、円(整数)に換算する関数を書け *)
(* ただし、1円以下は四捨五入する *)
(* 1$ = 114.32円 とする *)
let rate = 114.32;;
let dol2yen dol = int_of_float(floor ( dol *. rate +. 0.5));;
let yen2dol yen = floor((float_of_int(yen) /. rate) *. 100. +. 0.5) /. 100.;;
let kanzan_dol2yen (dol:float) =
let str_dol_up = string_of_int(int_of_float(floor dol)) in
let str_dol_low = string_of_int(int_of_float(floor (dol *. 100.)) mod 100) in
let str_yen = string_of_int(dol2yen dol) in
str_dol_up ^ "." ^ str_dol_low ^ " dollers are " ^ str_yen ^ " yen.";;
(* TEST *)
let test1 = dol2yen 12. = 1372
let test2 = dol2yen 8.32 = 951
let test3 = yen2dol 1200 = 10.5
let test4 = yen2dol 1300 = 11.37
let test5 = kanzan_dol2yen 12.34 = "12.34 dollers are 1411 yen."
let test6 = kanzan_dol2yen 134.25 = "134.25 dollers are 15347 yen."
let capitalize moji =
let int_moji = int_of_char moji in
if (int_moji >= 97 && int_moji <= 122 )
then char_of_int(int_moji - 32)
else moji
(* TEST *)
let test7 = capitalize 'b' = 'B'
let test8 = capitalize 'C' = 'C'