Rakudo Starを触ってみた

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 

Rakudo Starを入れた

朝からPerl6の実装のひとつのRakudo Starを入れて遊んでた。

$ ./perl6 
> for 1..5 { .say }
1
2
3
4
5

無限リスト

> for 1..Inf { .say }
1
2
3
...
20092
20093
20094
Segmentation fault

週末にもう少し触ってみよう。

ProductName Einstieg in Perl 6
Alvar Freude
Addison Wesley Verlag / ¥ 4,393 ()
近日発売 予約可