1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
def c(x, y) =
if
x != y
then
print(
"#{x} != #{y}"
)
test.fail()
end
end
def f() =
# Tuples
let tuple = (123, "aabbcc", true, {foo=1})
let (x, y, z, t) = tuple
c(x, 123)
c(y, "aabbcc")
c(z, true)
c(t, {foo=1})
# List
let l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let [x, y, ...z, t, u, v] = l
c(x, 1)
c(y, 2)
c(z, [3, 4, 5, 6])
c(t, 7)
c(u, 8)
c(v, 9)
let [x, y] = [1, 2, 3]
c(x, 1)
c(y, 2)
let [..._, x, y] = [1, 2, 3]
c(x, 2)
c(y, 3)
let [..._, x, y] = [1, 2, 3]
c(x, 2)
c(y, 3)
let [x, _, ...z] = [1, 2, 3]
c(x, 1)
c(z, [3])
# Record
record = {foo=123, gni="gno", bla=3.24}
let {foo, gni, bla} = record
c(foo, 123)
c(gni, "gno")
c(bla, 3.24)
# Values with methods
record = 123.{foo=123, gni="gno", bla=3.24}
let {foo, gni, bla, ...v} = record
c(v, 123)
c(foo, 123)
c(gni, "gno")
c(bla, 3.24)
record = 123.{foo=321, gni="gnu", bla=4.12}
let {foo, gni, bla, ..._} = record
c(foo, 321)
c(gni, "gnu")
c(bla, 4.12)
# Combined patterns
# Patterns inside records
record' = {foo=tuple, gni=l, r=record}
let {foo = (x, y, z, t), gni = [a, b, ...s, d], r = {gni, ...v}} = record'
c(foo, tuple)
c(x, 123)
c(y, "aabbcc")
c(z, true)
c(t, {foo=1})
c(a, 1)
c(b, 2)
c(s, [3, 4, 5, 6, 7, 8])
c(d, 9)
c(r, record)
c(v, 123)
c(gni, "gnu")
x = {foo=123, gni="gno", bla=3.24}
y = {foo=123, gni="gnu", bla=3.24}
z = {foo=123, gni="gno", bla=3.24}
t = {foo=123, gni="gno", bla=4.24}
l = [x, y, z, t]
let [{foo}, {gni}, ..._, {bla}] = l
c(foo, 123)
c(gni, "gnu")
c(bla, 4.24)
let ({foo = [{foo}, {gni}, ..._, {bla}]}, z) =
(
{foo=l},
"the letter z"
)
c(foo, 123)
c(gni, "gnu")
c(bla, 4.24)
c(
z,
"the letter z"
)
test.pass()
end
test.check(f)
|