If you're interested in functional programming, you might also want to checkout my second blog which i'm actively working on!!

Saturday, October 12, 2013

Pattern matching on each-of types (bad vs good style) ML

fun sum_triple_bad_style triple =
case triple of (x,y,z) => x + y + z
fun sum_triple_better_style triple =
let val (x,y,z) = triple
in
x + y + z
end
fun sum_triple_best_style (x,y,z) = x + y + z
(*
assume a record looks like
{ first="Robby", last="Pelssers"}
*)
fun full_name_bad_style r =
case r of {first=f, last=l} => f ^ " " ^ l
fun full_name_better_style r =
let val {first=f, last=l} = r
in
f ^ " " ^ l
end
fun full_name_best_style {first=f, last=l} = f ^ " " ^ l
val sum1 = sum_triple_bad_style (1,2,3)
val sum2 = sum_triple_better_style (1,2,3)
val sum3 = sum_triple_best_style (1,2,3)
val fullname1 = full_name_bad_style({first="Robby", last="Pelssers"})
val fullname2 = full_name_better_style({first="Robby", last="Pelssers"})
val fullname3 = full_name_best_style({first="Robby", last="Pelssers"})
(* output of program
- use "patterns.sml";
[opening patterns.sml]
val sum_triple_bad_style = fn : int * int * int -> int
val sum_triple_better_style = fn : int * int * int -> int
val sum_triple_best_style = fn : int * int * int -> int
val full_name_bad_style = fn : {first:string, last:string} -> string
val full_name_better_style = fn : {first:string, last:string} -> string
val full_name_best_style = fn : {first:string, last:string} -> string
val sum1 = 6 : int
val sum2 = 6 : int
val sum3 = 6 : int
val fullname1 = "Robby Pelssers" : string
val fullname2 = "Robby Pelssers" : string
val fullname3 = "Robby Pelssers" : string
val it = () : unit
*)
view raw gistfile1.sml hosted with ❤ by GitHub

No comments:

Post a Comment