Wiki Bookを読みながら、面白いなと思った部分。
型チェックしてくれる
> my Int $x;
Int()
> $x = "1"
Type check failed for assignment
> $x = 1
1
multi method dispatch
Haskellっぽくかける
> multi sub fib (Int $n where { $n < 3 }) { 1 }
> multi sub fib (Int $n) { fib($n - 1) + fib($n - 2) }
> fib(10) #55
終了条件を最初に決めて、あとは再帰させてみた。
> multi sub mysum (@a where {@a == 0}) {return 0}
> multi sub mysum (@a) {@a[0] + mysum(@a[1..(@a-1)])}
> mysum 1..10 #55
Placeholder Arguments
$^で
> for (@myArray) { say $^a + $^b; }
3 # 1+2
7 # 3+4
11 # 5+6
gather take
リスト内包表記っぽい。それともScalaっぽい?
> gather for 1..10 {take $_ if $_ % 3 == 0} # 3 6 9
こんな感じにもできる
> gather for 1..10 {take 1..$_,"\n"}
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10