Skip to content

Instantly share code, notes, and snippets.

@sugitach
Last active August 29, 2015 14:08
Show Gist options
  • Save sugitach/ca3da314af547cf0caf6 to your computer and use it in GitHub Desktop.
Save sugitach/ca3da314af547cf0caf6 to your computer and use it in GitHub Desktop.
(* 学生一人分のデータ *)
type gakusei_t = {name: string; tensuu: int; seiseki: string}
(*学生データのリスト*)
let gakusei1 = { name = "asai"; tensuu = 70; seiseki = "B"; }
let gakusei2 = { name = "kaneko"; tensuu = 85; seiseki = "A"; }
let gakusei3 = { name = "yoshida"; tensuu = 80; seiseki = "A"; }
let gakusei4 = { name = "x-asai"; tensuu = 70; seiseki = "B"; }
let gakusei5 = { name = "x-kaneko"; tensuu = 85; seiseki = "A"; }
let gakusei6 = { name = "x-yoshida"; tensuu = 80; seiseki = "A"; }
let lst1 = []
let lst2 = [gakusei1]
let lst3 = [gakusei1; gakusei2]
let lst4 = [gakusei3; gakusei1; gakusei2]
let lst5 = [gakusei3; gakusei1; gakusei2; gakusei4; gakusei5; gakusei6]
(* gakuse_t型のリストから、最高得点の人のレコードを返す *)
(* gakusei_max : gakusei_t list -> gakusei_t *)
let rec gakusei_max lst = match lst with
[] -> { name = "void"; tensuu = 0; seiseki = "0"; }
| first :: rest -> if (first.tensuu > (gakusei_max rest).tensuu)
then first
else gakusei_max rest
let t1 = (gakusei_max lst1).name = "void"
let t2 = (gakusei_max lst2).name = "asai"
let t3 = (gakusei_max lst3).name = "kaneko"
let t4 = (gakusei_max lst4).name = "kaneko"
(* gakuse_t型のリストから、最高得点の人のレコードのリストを返す *)
(* gakusei_max : gakusei_t list -> gakusei_t lst*)
let rec gakusei_max_list all lst = match lst with
[] -> []
| first :: rest -> if (first.tensuu = (gakusei_max all).tensuu)
then first::(gakusei_max_list all rest)
else gakusei_max_list all rest
(* test *)
let tx = gakusei_max_list lst5 lst5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment