mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 09:41:36 +00:00
[standard-ml/en-en] Format fixing and some APIs (#2645)
* [standard-ml/en-en] Format fixing * [standard-ml/en-en] Add descriptions for `map` and `foldl` * [standard-ml/en-en] Add myself as a contributor * review
This commit is contained in:
parent
45de0120d6
commit
d8a3184a73
@ -235,17 +235,18 @@ val hmm = answer "What is the meaning of life, the universe and everything?"
|
|||||||
|
|
||||||
(* Functions can take several arguments by taking one tuples as argument: *)
|
(* Functions can take several arguments by taking one tuples as argument: *)
|
||||||
fun solve2 (a : real, b : real, c : real) =
|
fun solve2 (a : real, b : real, c : real) =
|
||||||
( (~b + Math.sqrt(b * b - 4.0*a*c)) / (2.0 * a),
|
((~b + Math.sqrt(b * b - 4.0 * a * c)) / (2.0 * a),
|
||||||
(~b - Math.sqrt(b * b - 4.0*a*c)) / (2.0 * a) )
|
(~b - Math.sqrt(b * b - 4.0 * a * c)) / (2.0 * a))
|
||||||
|
|
||||||
(* Sometimes, the same computation is carried out several times. It makes sense
|
(* Sometimes, the same computation is carried out several times. It makes sense
|
||||||
to save and re-use the result the first time. We can use "let-bindings": *)
|
to save and re-use the result the first time. We can use "let-bindings": *)
|
||||||
fun solve2 (a : real, b : real, c : real) =
|
fun solve2 (a : real, b : real, c : real) =
|
||||||
let val discr = b * b - 4.0*a*c
|
let val discr = b * b - 4.0 * a * c
|
||||||
val sqr = Math.sqrt discr
|
val sqr = Math.sqrt discr
|
||||||
val denom = 2.0 * a
|
val denom = 2.0 * a
|
||||||
in ((~b + sqr) / denom,
|
in ((~b + sqr) / denom,
|
||||||
(~b - sqr) / denom) end
|
(~b - sqr) / denom)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
(* Pattern matching is a funky part of functional programming. It is an
|
(* Pattern matching is a funky part of functional programming. It is an
|
||||||
@ -292,6 +293,9 @@ val thermometer =
|
|||||||
val some_result = (fn x => thermometer (x - 5) ^ thermometer (x + 5)) 37
|
val some_result = (fn x => thermometer (x - 5) ^ thermometer (x + 5)) 37
|
||||||
|
|
||||||
(* Here is a higher-order function that works on lists (a list combinator) *)
|
(* Here is a higher-order function that works on lists (a list combinator) *)
|
||||||
|
(* map f l
|
||||||
|
applies f to each element of l from left to right,
|
||||||
|
returning the list of results. *)
|
||||||
val readings = [ 34, 39, 37, 38, 35, 36, 37, 37, 37 ] (* first an int list *)
|
val readings = [ 34, 39, 37, 38, 35, 36, 37, 37, 37 ] (* first an int list *)
|
||||||
val opinions = List.map thermometer readings (* gives [ "Cold", "Warm", ... ] *)
|
val opinions = List.map thermometer readings (* gives [ "Cold", "Warm", ... ] *)
|
||||||
|
|
||||||
@ -324,7 +328,11 @@ val n = op + (5, 5) (* n is now 10 *)
|
|||||||
(* 'op' is useful when combined with high order functions because they expect
|
(* 'op' is useful when combined with high order functions because they expect
|
||||||
functions and not operators as arguments. Most operators are really just
|
functions and not operators as arguments. Most operators are really just
|
||||||
infix functions. *)
|
infix functions. *)
|
||||||
val sum_of_numbers = foldl op+ 0 [1,2,3,4,5]
|
(* foldl f init [x1, x2, ..., xn]
|
||||||
|
returns
|
||||||
|
f(xn, ...f(x2, f(x1, init))...)
|
||||||
|
or init if the list is empty. *)
|
||||||
|
val sum_of_numbers = foldl op+ 0 [1, 2, 3, 4, 5]
|
||||||
|
|
||||||
|
|
||||||
(* Datatypes are useful for creating both simple and complex structures *)
|
(* Datatypes are useful for creating both simple and complex structures *)
|
||||||
@ -407,7 +415,8 @@ fun writePoem(filename) =
|
|||||||
let val file = TextIO.openOut(filename)
|
let val file = TextIO.openOut(filename)
|
||||||
val _ = TextIO.output(file, "Roses are red,\nViolets are blue.\n")
|
val _ = TextIO.output(file, "Roses are red,\nViolets are blue.\n")
|
||||||
val _ = TextIO.output(file, "I have a gun.\nGet in the van.\n")
|
val _ = TextIO.output(file, "I have a gun.\nGet in the van.\n")
|
||||||
in TextIO.closeOut(file) end
|
in TextIO.closeOut(file)
|
||||||
|
end
|
||||||
|
|
||||||
(* Read a nice poem from a file into a list of strings *)
|
(* Read a nice poem from a file into a list of strings *)
|
||||||
fun readPoem(filename) =
|
fun readPoem(filename) =
|
||||||
|
Loading…
Reference in New Issue
Block a user