Skip to content

Instantly share code, notes, and snippets.

@hakobe
Created February 2, 2009 06:30
Show Gist options
  • Save hakobe/56803 to your computer and use it in GitHub Desktop.
Save hakobe/56803 to your computer and use it in GitHub Desktop.
use strict;
use warnings;
use Coro::State;
use Perl6::Say;
sub count {
my ($start) = @_;
my $n = $start;
my $p = Coro::State->new;
my $c;
$c = Coro::State->new(sub {
while (1) {
$c->transfer($p);
$n += 1;
}
});
sub {
$p->transfer($c);
return $n;
}
};
sub fib {
my ($start) = @_;
my $n = 0;
my $m = 1;
my $result;
my $p = Coro::State->new;
my $c;
$c = Coro::State->new(sub {
$result = $n;
$c->transfer($p);
$result = $m;
$c->transfer($p);
while (1) {
$result = $n+$m;
($n, $m) = ($m, $n+$m);
$c->transfer($p);
}
});
sub {
$p->transfer($c);
return $result;
}
};
my $c = count();
for (0..9) {
say $c->();
}
say;
my $f = fib();
for (0..9) {
say $f->();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment