use std, types v = rand(10) println match v { case 0: "Zero" case 1: "One" case x if x <= 5: "Two..five" case _: "Six..nine" } def match1(v) = match v { case 1: "One" case "Two": 2 case x if typeof(x) == NUMBER: "Number" case x if typeof(x) == STRING: "String" case _: "other" } println match1(1) println match1(322) println match1("test") println match1("Two") println match1([2]) println "\nRecursive factorial" println factorial(6) def factorial(n) = match n { case 0: 1 case _: n * factorial(n - 1) } println "\nPattern matching on arrays" println printArrayRecursive([1, 2, 3, 4, 5, 6, 7]) def printArrayRecursive(arr) = match arr { case [head :: tail]: "[" + head + ", " + printArrayRecursive(tail) + "]" case []: "[]" case other: "[" + other + ", []]" } println "\nPattern matching on arrays by value" def tupleMatch(x) = match x { case (0, 0): "00" case (1, 0): "10" case (0, 1): "01" case (1, 1): "11" case (2, _): "2?" case _: "unknown" } println tupleMatch([0, 1]) println tupleMatch([1, 1]) println tupleMatch([2, 1]) println tupleMatch([3, 9]) println "\nFizzBuzz with pattern matching" for i = 1, i <= 100, i++ { println match [i % 3 == 0, i % 5 == 0] { case (true, false): "Fizz" case (false, true): "Buzz" case (true, true): "FizzBuzz" case _: i } }