Add case expression to SML docs

Show an example of pattern-matching using the case expression.
This commit is contained in:
Chris Wilson 2018-01-04 15:49:43 -06:00 committed by GitHub
parent 70a36c9bd9
commit 9999a30e04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,6 +6,7 @@ contributors:
- ["David Pedersen", "http://lonelyproton.com/"] - ["David Pedersen", "http://lonelyproton.com/"]
- ["James Baker", "http://www.jbaker.io/"] - ["James Baker", "http://www.jbaker.io/"]
- ["Leo Zovic", "http://langnostic.inaimathi.ca/"] - ["Leo Zovic", "http://langnostic.inaimathi.ca/"]
- ["Chris Wilson", "http://sencjw.com/"]
--- ---
Standard ML is a functional programming language with type inference and some Standard ML is a functional programming language with type inference and some
@ -266,6 +267,16 @@ fun second_elem (x::y::xs) = y
fun evenly_positioned_elems (odd::even::xs) = even::evenly_positioned_elems xs fun evenly_positioned_elems (odd::even::xs) = even::evenly_positioned_elems xs
| evenly_positioned_elems [odd] = [] (* Base case: throw away *) | evenly_positioned_elems [odd] = [] (* Base case: throw away *)
| evenly_positioned_elems [] = [] (* Base case *) | evenly_positioned_elems [] = [] (* Base case *)
(* The case expression can also be used to pattern match and return a value *)
datatype temp =
C of real
| F of real
fun temp_to_f t =
case t of
C x => x * (9.0 / 5.0) + 32.0
| F x => x
(* When matching on records, you must use their slot names, and you must bind (* When matching on records, you must use their slot names, and you must bind
every slot in a record. The order of the slots doesn't matter though. *) every slot in a record. The order of the slots doesn't matter though. *)