-
Notifications
You must be signed in to change notification settings - Fork 0
/
variants.ml
60 lines (39 loc) · 1.28 KB
/
variants.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
type point = float * float ;;
(* define as many type you want that you can use later *)
type shape =
| Circle of {center: point ; radius: float}
| Square of {lw_lft: point ; upr_rt: point}
| Cylinder of {center: point;radius: float ; height: float}
;;
let c1 = Circle {center = (2.3,3.4); radius = 4.5}
let r1 = Square {lw_lft = (1.0,2.0); upr_rt = (3.5,4.5)}
let cyl = Cylinder {center = (0.0,0.0);radius = 5.6 ; height = 7.0}
let avg a b =
(a +. b) /. 2.
;;
(* using pattern matching for printing center *)
(* let center s =
match s with
| Circle {center; radius} -> center
| Square {lw_lft ; upr_rt} ->
let (x_ll, y_ll) = lw_lft in
let (x_ur, y_ur) = upr_rt in
(avg x_ll x_ur, avg y_ll y_ur) *)
;;
let cylvol r h =
3.14 *. r *. r *. h ;;
;;
(* this is much cleaner will help when dealing with more complexity *)
let center s =
match s with
| Circle {center; radius} -> center
| Square {lw_lft = (x_ll, y_ll) ; upr_rt = (x_ur, y_ur)} ->
(avg x_ll x_ur, avg y_ll y_ur)
| Cylinder {radius; height;_} -> (cylvol radius height, 0.0)
;;
type person =
| Child of {name: string ; age: int}
| Woman of {name: string ; age: int}
;;
let child1 = Child {name= "abhishek";age= 19};;
let woman1 = Child {name= "abhiiii";age= 24};;