39 lines
1.6 KiB
Plaintext
39 lines
1.6 KiB
Plaintext
& Lesson 9: Flipping coins
|
|
|
|
& Let's try a different version of this random walk. Instead of going an arbitrary amount forward, and an arbitrary amount left or right, let's turn left OR right, let's go forward OR backwards by a fixed amount.
|
|
& We need coin flips!
|
|
|
|
let coin = [true, false] & these are booleans: equivalent to heads and tails
|
|
& ^^^^^^^^^^^^^ this is a list with two members
|
|
& Lists are like parameters or arguments, but with square brackets
|
|
|
|
fn flip_coin () -> random (coin)
|
|
& ^^^^^^ `random` will pick a random element of a collection
|
|
& ^^^^ `coin` is a collection of two elements
|
|
|
|
let times = random (10, 30) & we'll do this a random number of times
|
|
|
|
repeat times {
|
|
pc! (random (colors))
|
|
& `if` is our first conditional form
|
|
if flip_coin ()
|
|
& ^^ the expression starts with `if`
|
|
& ^^^^^^^^^^^^ this is our *condition*
|
|
& if the condition is true, run the `then` branch
|
|
& if it is false, run the `else` branch
|
|
& in this case, our condition is the coin flip
|
|
then rt! (0.25)
|
|
& ^^^^ `then` gives us the branch to evaluate if true
|
|
& ^^^^^^^^^^ in this case, turn right 0.25 turns
|
|
else lt! (0.25)
|
|
& ^^^^ `else` gives us the branch to evaluate if false
|
|
& NB: Ludus requires you have a false branch
|
|
& ^^^^^^^^^^ in this case, turn left 0.25 turns
|
|
& This whole expression is:
|
|
& turn right 50% of the time, turn left 50% of the time
|
|
|
|
& we don't need newlines before `then` and `else`
|
|
& but you can include them!
|
|
if flip_coin () then fd! (5) else bk! (5)
|
|
}
|