読者です 読者をやめる 読者になる 読者になる

100までの素数 (キミならどう書く 2.0 - L.L. Ring)

Perl

http://ll.jus.or.jp/2006/blog/doukaku1/
http://d.hatena.ne.jp/t-akihito/20060625/1151227410
LL Ring のチケット発売今日からだ。買ってこなくちゃ。

List::MoreUtils から all と before_incl を使って、リスト操作っぽく書いてみた。List::MoreUtils は標準モジュールじゃないけどね。

#!/usr/bin/perl
use strict;
use List::MoreUtils qw(:all);
my $max = shift || 100;
my @primes = (2);                            # 最初の素数は 2                    (0)
for my $n (3..$max){                         # 3 〜 $max の全ての整数に付いて    (1)
    push @primes, $n                         # 素数列に追加                      (5)
        if all         { $n % $_ }           # 剰余がすべて真(!=0)なら           (4)
           before_incl { sqrt $n <= $_ }     # $n の平方根以下のものだけ抽出して (3)
           @primes;                          # $n 以下の素数から                 (2)
}
print "@primes\n";

(0)→(5)の順番に読む。(2)〜(4)が逆順になるのが読みづらいのだけど、これって Perl 6 だとどうにかできるんだったっけ……