#!/usr/bin/perl -w
use strict;
use Stream;
sub merge {
my $s1 = shift;
my $s2 = shift;
return $s2 if $s1->is_empty;
return $s1 if $s2->is_empty;
my $h1 = $s1->head;
my $h2 = $s2->head;
if ($h1 > $h2) {
Stream->new($h2,sub { merge($s1,$s2->tail) });
} elsif ($h1 < $h2) {
Stream->new($h1,sub { merge($s1->tail,$s2) });
} else {
Stream->new($h1,sub { merge($s1->tail,$s2->tail) });
}
}
sub hamming {
my $hack = \1;
my $hamming = Stream->new(
1,
sub { merge($$hack->scale(2),
merge($$hack->scale(3),
$$hack->scale(5)))
}
);
$hack = \$hamming;
$hamming;
}
hamming()->show(20);