use experimental :cached;
multi mortal($x) { man($x) }
multi man("socrates") { True }
say mortal "socrates";
multi len([], 0) { True }
multi len([], Whatever) { 0 }
multi len([$, *@tail], Whatever) is cached {
len(@tail, *) + 1
}
say len [1, 2, 3 ], *;
multi fib(0, 1) { True }
multi fib(1, 1) { True }
multi fib(0, Whatever) { 1 }
multi fib(1, Whatever) { 1 }
multi fib(Int $n, Whatever) is cached {
fib($n-1, *) + fib($n-2, *)
}
multi fib(Int $n, Int $r) { fib($n, *) == $r }
say fib 4, *;
say fib 5, 8;