mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
Add examples of imperative-style control
Make reference and update, add use of a while and use of seq
This commit is contained in:
parent
02bc518351
commit
f8260574d9
@ -383,6 +383,25 @@ val test_poem = readPoem "roses.txt" (* gives [ "Roses are red,",
|
|||||||
"Violets are blue.",
|
"Violets are blue.",
|
||||||
"I have a gun.",
|
"I have a gun.",
|
||||||
"Get in the van." ] *)
|
"Get in the van." ] *)
|
||||||
|
|
||||||
|
(* We can create references to data which can be updated *)
|
||||||
|
val counter = ref 0 (* Produce a reference with the ref function *)
|
||||||
|
|
||||||
|
(* Assign to a reference with the assignment operator *)
|
||||||
|
fun set_five reference = reference := 5
|
||||||
|
|
||||||
|
(* Read a reference with the dereference operator *)
|
||||||
|
fun equals_five reference = !reference = 5
|
||||||
|
|
||||||
|
(* We can use while loops for when recursion is messy *)
|
||||||
|
fun decrement_to_zero r = if !r < 0
|
||||||
|
then r := 0
|
||||||
|
else while !r >= 0 do r := !r - 1
|
||||||
|
|
||||||
|
(* This returns the unit value (in practical terms, nothing, a 0-tuple) *)
|
||||||
|
|
||||||
|
(* To allow returning a value, we can use the semicolon to sequence evaluations *)
|
||||||
|
fun decrement_ret x y = (x := !x - 1; y)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Further learning
|
## Further learning
|
||||||
|
Loading…
Reference in New Issue
Block a user