Categories
Posts in this category
- A shiny perl6.org site
- Creating an entry point for newcomers
- Sprixel, a 6 compiler powered by JavaScript
- Another perl6.org iteration
- Blackjack and Perl 6
- Why I commit Crud to the Perl 6 Test Suite
- Report from the Perl 6 Hackathon in Copenhagen
- Custom operators in Rakudo
- Defined Behaviour with Undefined Values
- Dissecting the "Starry obfu"
- Perl 6: Failing Softly with Unthrown Exceptions
- The first Perl 6 module on CPAN
- Google Summer of Code Mentor Recap
- Building a Huffman Tree With Rakudo
- Immutable Sigils and Context
- Is Perl 6 really Perl?
- Perl 6: Lost in Wonderland
- Lots of momentum in the Perl 6 community
- Musing and the future of feather and the Pugs repository
- Musings on Rakudo's spectest chart
- My first executable from Perl 6
- Trying to implement new operators - failed
- Let's build an object
- Perl 6 is optimized for fun
- How to get a parse tree for a Perl 6 Program
- Perl 6 in 2009
- Perl 6 ticket life cycle
- The Perl 6 Advent Calendar
- How to Plot a Segment of a Circle with SVG
- Publicity for Perl 6
- Rakudo architectural overview
- Rakudo Rocks
- Rakudo "star" announced
- Rakudo's rough edges
- Rats and other pets
- Releasing Rakudo made easy
- Set Phasers to Stun!
- Starry Perl 6 obfu
- Recent Perl 6 Developments August 2008
- Strings and Buffers
- Subroutines vs. Methods - Differences and Commonalities
- A SVG plotting adventure
- A Syntax Highlighter for Perl 6
- Test Suite Reorganization: How to move tests
- The Happiness of Design Convergence
- Perl 6 Tidings from September and October 2008
- Perl 6 Tidings for November 2008
- Perl 6 Tidings from December 2008
- Perl 6 Tidings from January 2009
- Perl 6 Tidings from February 2009
- Perl 6 Tidings from March 2009
- Perl 6 Tidings from April 2009
- Perl 6 Tidings from May 2009
- Perl 6 Tidings from May 2009 (second iteration)
- Perl 6 Tidings from June 2009
- Perl 6 Tidings from August 2009
- Perl 6 Tidings from October 2009
- Timeline for a syntax change in Perl 6
- Visualizing match trees
- We write a Perl 6 book for you
- When we reach 100% we did something wrong
- Where Rakudo Lives Now
- Why was the Perl 6 Advent Calendar such a Success?
- What you can write in Perl 6 today
- Why you don't need the Y combinator in Perl 6
Sun, 27 Jul 2008
Building a Huffman Tree With Rakudo
Permanent link
15 months ago I wrote a blog post about Building a Huffman Tree with Perl 6 (German). Back then I used pugs to test it.
Now I tried it with Rakudo Perl revision 29736, and to my delight I discovered that it worked nearly without modification.
(Actually it needed a small modification because I made a mistake in the testing originally, I compared hashes with string semantics. That works in pugs even though it is not specified; in rakudo it doesn't).
I updated my script a bit to do the testing correctly, and used a few more typical Perl 6 idioms:
use Test; plan 6; # number of occurences my @fr = ( ['a', 45], ['b', 13], ['c', 12], ['d', 16], ['e', 9 ], ['f', 5 ], ); # That's what we expect my %expected = ( a => '0', b => '101', c => '100', d => '111', e => '1101', f => '1100' ); my @c = @fr; # build the huffman tree while @c > 1 { @c = sort { $^a[1] <=> $^b[1] }, @c; my $a = shift @c; my $b = shift @c; unshift @c, [[$a[0], $b[0]], $a[1] + $b[1]]; } my %res; # recursively traverse the tree to build the code sub traverse ($a, Str $code = ""){ if $a ~~ Str { %res{$a} = $code; } else { traverse($a[0], $code ~ '0'); traverse($a[1], $code ~ '1'); } } traverse(@c[0][0]); # now compare with the expected code: #say %res; #say %expected; for %res.keys -> $k { is %res{$k}, %expected{$k}, "Huffman code for letter $k"; }
Comments / Trackbacks:
Trackback URL:
/blog-en/perl-6/huffman-tree-with-rakudo.trackback
Write a comment
The comments on this blog post have been disabled; the comment form below will not work.