Fizzbuzzbaz
Fizzbuzz with the rules supplied at runtime, built from pipes and a returned lambda.
module fizzbuzzbaz
-- Fizzbuzzbaz is a variant of fizzbuzz where the rules are supplied at
-- runtime. For example, 3 -> "fizz", 5 -> "buzz", 7 -> "baz", so a multiple
-- of both 3 and 7 is replaced with "fizzbaz".
def playNumber: (divisor: int, word: string, i: int) -> string = { divisor, word, i ->
if i % divisor == 0 then word else ""
}
def numberGame: list((int, string)) -> (int -> string) = { rules ->
{ i ->
rules
\map { divisor, word -> playNumber(divisor = divisor, word = word, i = i) }
\String.join("")
\match
| "" -> "{i}"
| s -> s
}
}
def fizzbuzz = numberGame([(3, "fizz"), (5, "buzz"), (7, "baz")])
@entry
def main = {
for 1..30 | i -> println(fizzbuzz(i))
}
This program lives in the repository as examples/fizzbuzzbaz.nyx.