驚いた素数
とても驚いた素数の数え上げ。
Perlに移してみました。
use strict; use warnings; # # See: # http://log.ttsky.net/article/19432981.html # http://www.nslabs.jp/haskell_vs_ruby.rhtml # package Local::Prime; use bignum; sub new { return bless { hash => {}, n => 1, }, shift; } sub iter { my ($self) = @_; while(1){ $self->{n}++; my $proc = $self->{hash}->{$self->{n}}; if (defined $proc){ $proc->(); delete $self->{hash}->{$self->{n}}; next; } my $m = $self->{n}; my $n = $self->{n}; my $next_proc; $next_proc = sub { $m += $n; my $proc = $self->{hash}->{$m}; $proc->() if (defined $proc); $self->{hash}->{$m} = $next_proc; }; $next_proc->(); return $self->{n}; } } package main; my $prime = Local::Prime->new; foreach(0..14){ print $prime->iter, "\n"; }
関数型の発想方法なんでしょうか。衝撃を受けました。