<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-739580098595224395</id><updated>2011-08-01T18:36:24.076-07:00</updated><category term='Help'/><category term='math'/><category term='Ack'/><category term='Range'/><category term='Perl 5'/><category term='change'/><category term='Sieve'/><category term='SVG'/><category term='Perl'/><category term='Configure'/><category term='OO'/><category term='Factor'/><category term='Polynomial'/><category term='Roles'/><category term='OS X'/><category term='Catalyst'/><category term='C++'/><category term='Rat'/><category term='Padre'/><category term='Code Review'/><category term='valgrind'/><category term='regexes'/><category term='Knot Vector'/><category term='moritz++'/><category term='Linux'/><category term='TextMate'/><category term='Gist'/><category term='NURBS'/><category term='Forth'/><category term='STD.pm'/><category term='Rakudo'/><category term='Perl6'/><category term='IRC'/><category term='Perl 6'/><category term='Debugging'/><category term='Project Euler'/><category term='performance'/><category term='proto'/><category term='misadventures'/><category term='testing'/><category term='Norvig'/><category term='Vector'/><category term='hyperoperators'/><category term='Num'/><category term='ABC'/><category term='Optimization'/><category term='CPAN'/><category term='Pugs'/><title type='text'>Last of the Careless Men</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default?start-index=101&amp;max-results=100'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>112</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-8700554742034455847</id><published>2010-05-10T19:29:00.000-07:00</published><updated>2010-05-10T19:45:45.847-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Vector'/><title type='text'>Arising from Slumber</title><content type='html'>Sorry for falling off the world of Iron Man; life has been busy.&lt;br /&gt;&lt;br /&gt;Seeing the new proto web page got me thinking I should try to bring Vector and ABC forward into the world of the current Rakudo.  Okay, &lt;code&gt;make clean&lt;/code&gt; and &lt;code&gt;make&lt;/code&gt; work fine for Vector.  &lt;code&gt;make test&lt;/code&gt; fails every test.&lt;br /&gt;&lt;br /&gt;So I started in with 01-basics.t.  It seems to be having trouble with the custom Unicode operators.  Then I remembered seeing something on #perl6 about using &lt;code&gt;our&lt;/code&gt; with custom operators.  So I added it to both the dot product operators (one of them the Texas version, "dot").  And got the following error:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;error:imcc:syntax error, unexpected '\n'&lt;br /&gt; in file 'EVAL_5' line -1061556260&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Perl 6 experts, help?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-8700554742034455847?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/8700554742034455847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/05/arising-from-slumber.html#comment-form' title='32 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/8700554742034455847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/8700554742034455847'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/05/arising-from-slumber.html' title='Arising from Slumber'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>32</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-241780924182021775</id><published>2010-03-21T18:23:00.000-07:00</published><updated>2010-03-21T18:57:27.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Vector'/><title type='text'>Apologies and Vector Again</title><content type='html'>In my &lt;a href="http://lastofthecarelessmen.blogspot.com/2010/03/progress-and-congress.html"&gt;last post&lt;/a&gt; I griped a bit about the lack of progress on several of the issues that have been bothering me.  Well, it turns out there is a &lt;a href="http://use.perl.org/~pmichaud/journal/40248"&gt;sad explanation&lt;/a&gt; for why things have been slow.  I came into the Perl 6 sphere after the previous cancer bout referred to here, so this was a complete surprise for me.  Of course Patrick's wife's health is vastly more important than getting my toy program working.  I wish them both all the best.&lt;br /&gt;&lt;br /&gt;In the meanwhile, while that stuff hasn't been fixed, there's apparently been a huge wave of progress with the metaops in the last week -- enough so that I thought it might be worth trying Vector again.  And, well... It blew up compiling Vector.pm with a pretty obscure error message.  Pretty easy to guess the source of the problem, though:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&gt; my @a = 1..3; my @b = 3..5; say @a &gt;&gt;*&lt;&lt; @b&lt;br /&gt;3815&lt;br /&gt;&gt; my @a = 1..3; my @b = 3..5; say @a »*« @b&lt;br /&gt;Confused at line 1, near "say @a \x{c2}\x{bb}*"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;So Texas hyper-ops work, but the proper ones do not.  Well, that's an easy enough change.&lt;br /&gt;&lt;br /&gt;Hmmm... next issue: &lt;code&gt;is also&lt;/code&gt; is history.  It's &lt;code&gt;augment&lt;/code&gt; now.  That's easy enough. And then you get &lt;code&gt;Can't augment class Vector without 'use MONKEY_TYPING'&lt;/code&gt;.  Which is also easy to fix.&lt;br /&gt;&lt;br /&gt;Next error, though is&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;error:imcc:syntax error, unexpected '\n'&lt;br /&gt; in file 'EVAL_5' line 58&lt;br /&gt;Contextual $*PKGDECL not found&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ummm... I've got nothing.  Any one have an idea what this might mean?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-241780924182021775?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/241780924182021775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/03/apologies-and-vector-again.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/241780924182021775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/241780924182021775'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/03/apologies-and-vector-again.html' title='Apologies and Vector Again'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-9027074704128440220</id><published>2010-03-11T14:04:00.000-08:00</published><updated>2010-03-11T14:12:07.281-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Progress and Congress</title><content type='html'>So, it's was interesting to see the relative receptions of my last two posts.  &lt;a href="http://lastofthecarelessmen.blogspot.com/2010/02/e03-laziness-catch.html"&gt;Laziness, the Catch&lt;/a&gt; caused a massive flurry on discussion on #perl6, and eventual plans for how to overhaul Perl 6 and Rakudo to deal with it.  As far as I know, though, there's been no development in this area in Rakudo, so the scary bug is still very much present.&lt;br /&gt;&lt;br /&gt;On the other hand, the &lt;a href="http://lastofthecarelessmen.blogspot.com/2010/03/lazy-sieve-of-eratosthenes-sidetracked.html"&gt;Lazy Sieve of Eratosthenes&lt;/a&gt; gather / take bug is generally acknowledged, but doesn't have any momentum towards a patch at all, as far as I can see from #perl6.&lt;br /&gt;&lt;br /&gt;On the gripping hand, at least a few of the file operators (another issue with the E03 update) now work, thanks to lue++.&lt;br /&gt;&lt;br /&gt;It does seem like a fantastic amount of progress is being made on Rakudo at the moment.  I just hope these issues get addressed before Rakudo Star.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-9027074704128440220?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/9027074704128440220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/03/progress-and-congress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/9027074704128440220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/9027074704128440220'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/03/progress-and-congress.html' title='Progress and Congress'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-694200985208026</id><published>2010-03-03T07:03:00.000-08:00</published><updated>2010-03-03T07:21:26.242-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sieve'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Lazy Sieve of Eratosthenes, sidetracked</title><content type='html'>A Hacker News article about the Sieve of Eratosthenes got me thinking about how to do a lazy, infinite Sieve in Perl 6.  (I didn't read the whole article, because I wanted to produce my own implementation first!)  Unfortunately, my attempt to do so turned up what seems to be a very major bug lurking in Rakudo's gather / take.&lt;br /&gt;&lt;br /&gt;Basically, my notion was this.  The Sieve essentially consists of crossing off multiples from a list each time you find a new prime.  So what if instead of taking the list to be a fixed limited, fixed array of numbers, you made it an actual infinite lazy list?  All you need is a function which, given two infinite lists of numbers, takes the least element at the front of the lists and returns that.  Then you when find a new prime, you take your existing list and use that function to merge in the list of multiples of the new prime.&lt;br /&gt;&lt;br /&gt;So I started to code this up, and instantly ran into weirdness. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sorted&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;infinite&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sequence&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;merge&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;Iterator&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Crimson;"&gt;-&lt;/span&gt;&lt;span style="color: Crimson;"&gt;iterator&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;Iterator&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Crimson;"&gt;-&lt;/span&gt;&lt;span style="color: Crimson;"&gt;iterator&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;-&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;iterator&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;get&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;-&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;iterator&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;get&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;gather&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;loop&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;next&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;min&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# say &amp;quot;$a, $b, $next&amp;quot;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;next&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;-&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;iterator&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;get&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;i&lt;/span&gt;&lt;span style="color: Black;"&gt;f&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;next&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;-&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;iterator&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;get&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;i&lt;/span&gt;&lt;span style="color: Black;"&gt;f&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;next&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;sorted&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: Black;"&gt;infinite&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: Black;"&gt;sequence&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: Black;"&gt;merge&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DimGray;"&gt;..&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;100&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;iterator&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DimGray;"&gt;*&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;3&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DimGray;"&gt;..&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;100&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;iterator&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DimGray;"&gt;*&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;batch&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;20&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;say&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: Black;"&gt;sorted&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: Black;"&gt;infinite&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: Black;"&gt;sequence&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: Black;"&gt;merge&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;3&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;6&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;...&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;8&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;...&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;batch&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;20&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;say&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That code generates the following two lists:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(3, 4, 6, 8, 9, 12, 15, 16, 18, 20, 21, 24, 27, 28, 30, 32, 33, 36, 39, 40)&lt;br /&gt;(4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the first list is clearly correct.  The second list (which calls the same merge function, but using source lists generated via series instead of Range) is clearly incorrect.  I believe this must represent some sort of gather/take bug triggered by nested gather/take operations.&lt;br /&gt;&lt;br /&gt;Help?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-694200985208026?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/694200985208026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/03/lazy-sieve-of-eratosthenes-sidetracked.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/694200985208026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/694200985208026'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/03/lazy-sieve-of-eratosthenes-sidetracked.html' title='Lazy Sieve of Eratosthenes, sidetracked'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-5093039077035602067</id><published>2010-02-27T15:53:00.000-08:00</published><updated>2010-02-27T16:11:26.421-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>E03: Laziness: The Catch</title><content type='html'>So, jnthn++ fixed the &lt;code&gt;Nominal type check failed for parameter '@a'; expected Positional but got GatherIterator instead&lt;/code&gt; issue.  Errr, sort of.  Here's my sum sub:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sub sum(@a) {&lt;br /&gt;    +@a ?? @a.reduce({ $^a + $^b }) !! 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now it does get called properly if you say &lt;code&gt;sum(@costs.grep({$_ &amp;gt;= 1000}))&lt;/code&gt;.  But even though it appears to be a very simple function, it doesn't work when called this way!  The problem, as far as I can tell, is that &lt;code&gt;@a&lt;/code&gt; may look like a Seq or an Array, it's still actually an iterator.  That means the first time you use it for something like, say, &lt;code&gt;+@a&lt;/code&gt;, it is completely consumed!  Then the next time you access it, there's nothing left.  This is definitely not what is expected...&lt;br /&gt;&lt;br /&gt;Update: Just realized that without "Perl 6", Ironman didn't pick up the previous post or this one.  Time to edit...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-5093039077035602067?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/5093039077035602067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-laziness-catch.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5093039077035602067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5093039077035602067'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-laziness-catch.html' title='E03: Laziness: The Catch'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-3969720310243902874</id><published>2010-02-27T05:10:00.000-08:00</published><updated>2010-02-27T16:12:50.885-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>E03 in Master</title><content type='html'>So, I thought porting my E03 script to run on the current Rakudo master would make a good topic for a post.  So, what did I have to change?&lt;br /&gt;&lt;br /&gt;1. The code wouldn't parse with the metaoperators in it.  So they had to go.  Sob!&lt;br /&gt;&lt;br /&gt;2. &lt;code&gt;Symbol '$is_active_bit' not predeclared&lt;/code&gt;.  Okay, replace &lt;code&gt;constant&lt;/code&gt; with &lt;code&gt;my&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;3. &lt;code&gt;No applicable candidates found to dispatch to for 'subst'&lt;/code&gt;.  Well, that never actually worked properly in alpha, either.  Easy enough to replace this with &lt;code&gt;map&lt;/code&gt; and a new sub.&lt;br /&gt;&lt;br /&gt;4. &lt;code&gt;Method 'e' not found for invocant of class 'Str'&lt;/code&gt;.  Ack.  I just commented out these calls (I presumed &lt;code&gt;:s&lt;/code&gt; wouldn't work either).&lt;br /&gt;&lt;br /&gt;5. &lt;code&gt;:= binding of variables not yet implemented&lt;/code&gt;.  Switching this to &lt;code&gt;=&lt;/code&gt; --- errr --- breaks the code.  Guess I'll have to fix that in a minute.&lt;br /&gt;&lt;br /&gt;6. &lt;code&gt;Method 'count' not found for invocant of class 'Perl6MultiSub'&lt;/code&gt;.  Blast.  This was triggered by my new code &lt;code&gt;&lt;pre&gt;reduce(&amp;infix:&lt;+&gt;)&lt;/pre&gt;&lt;/code&gt;.  Easy enough to change it to &lt;code&gt;reduce({ $^a + $^b })&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;7. &lt;code&gt;Cannot reduce() empty list&lt;/code&gt;.  Arrrgh!  Turns out duplicating what &lt;code&gt;[+]&lt;/code&gt; does is harder than it looks.  I added a sub &lt;code&gt;sum&lt;/code&gt; to cleanly check for the empty list.&lt;br /&gt;&lt;br /&gt;8. &lt;code&gt;Nominal type check failed for parameter '@a'; expected Positional but got GatherIterator instead&lt;/code&gt;.  Oh, no.  This is some sort of internal issue showing through, and I have no idea how to fix it.&lt;br /&gt;&lt;br /&gt;Guess I will stop there for now, because I don't know how to go further.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;add_trailing_slash_if_needed&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;path&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;path&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;$&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;??&lt;/span&gt;&lt;span style="color: DimGray;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;path&lt;/span&gt;&lt;span style="color: DimGray;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;!&lt;/span&gt;&lt;span style="color: DimGray;"&gt;!&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;path&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;load_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filename&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;version&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;*&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;is&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;copy&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;./&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;peter&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;+&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;.=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;add_trailing_slash_if_needed&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;join&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;prefix&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;prefix&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filename&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# if ($filepath ~~ :e and 100 &amp;lt; ($filepath ~~ :s) &amp;lt;= 1e6) &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Trying to open &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;open&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;r&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                    &lt;/span&gt;&lt;span style="color: DimGray;"&gt;or&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Something screwy with &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;!&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;status&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;lines&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;next&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;i&lt;/span&gt;&lt;span style="color: Black;"&gt;f&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;version&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;split&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;s&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{}&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name vers stat costs rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                            &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;name&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;status&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;slurp&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; done&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;close&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;save_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;kv&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;saving &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;open&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                &lt;/span&gt;&lt;span style="color: DimGray;"&gt;or&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Something screwy with &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;!&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;print&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;:&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name vers stat&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;~&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;join&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;close&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# I've no idea what this sub was supposed to do, so let's stick with something really&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# simple for the moment.&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;amortize&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sum&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;+&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;??&lt;/span&gt;&lt;span style="color: DimGray;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DimGray;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;reduce&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;^&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;^&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DimGray;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;!&lt;/span&gt;&lt;span style="color: DimGray;"&gt;!&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: Black;"&gt;load_data&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;filename&lt;/span&gt;&lt;span style="color: Black;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;weblog&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;version&lt;/span&gt;&lt;span style="color: Black;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;is_active_bit&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: DarkOrange;"&gt;0x0080&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;kv&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;file&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;file&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; contains data on &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;stat&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;+^&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;is_active_bit&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# my @costs := $data&amp;lt;costs&amp;gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;prompt&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Inflation rate: &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;ntil&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# @costs = (@costs &amp;gt;&amp;gt;*&amp;gt;&amp;gt; $inflation).sort({ amortize($_) }); &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;sort&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;amortize&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# say &amp;quot;Total expenditure: { [+] @costs }&amp;quot;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# say &amp;quot;Major expenditure: { [+] @costs.grep({$_ &amp;gt;= 1000}) }&amp;quot;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# say &amp;quot;Minor expenditure: { [+] @costs.grep({$_ &amp;lt; 1000}) }&amp;quot;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Total expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;sum&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Major expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;sum&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1000&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Minor expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;sum&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1000&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Odd expenditures: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# save_data(%data, log =&amp;gt; {name=&amp;gt;'metalog', vers=&amp;gt;1, costs=&amp;gt;[], stat=&amp;gt;0});&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;save_data&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Update: Adding the words "Perl 6" in text so Ironman picks it up.  Sigh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-3969720310243902874?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/3969720310243902874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-in-master.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/3969720310243902874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/3969720310243902874'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-in-master.html' title='E03 in Master'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-7377521945063490461</id><published>2010-02-20T04:52:00.001-08:00</published><updated>2010-02-20T06:22:48.946-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>E03 Second Stab</title><content type='html'>As usual, masak++ has some brilliant stuff in &lt;a href="http://use.perl.org/~masak/journal/40195"&gt;his take&lt;/a&gt; on the E03 challenge, which I am shamelessly borrowing for my second version.  On the other hand, I think he has done himself a disservice by not making sure his code actually works in Rakudo, as I see several dodgy spots and an entire missing function in his version.&lt;br /&gt;&lt;br /&gt;So, some notes on masak's code:&lt;br /&gt;1) His default value for &lt;code&gt;@dirpath&lt;/code&gt; is wonky.  First, he seems to be assigning &lt;code&gt;@std_dirpath&lt;/code&gt; to &lt;code&gt;@last_dirpath&lt;/code&gt; if the former is undefined.  Second, neither of those variables is actually declared.  Third, he's left off the &lt;code&gt;'.'&lt;/code&gt; case, which is the one that actually works.&lt;br /&gt;&lt;br /&gt;2) On the plus side, he has a working regular expression for the &lt;code&gt;subst&lt;/code&gt;, and includes the assignment operator I forgot (in my comment version).  On the minus side, the right hand side of the substitution is bad -- it works in theory, but does not work in practice in Rakudo alpha (nor master, so far as I know).&lt;br /&gt;&lt;br /&gt;3) I'm amused that he used comb instead of the original's split.  Both lines have the exact same effect, so far as I know.  Arguably his has a little more style than mine. &lt;br /&gt;&lt;br /&gt;4) I'm interested that he didn't notice that &lt;code&gt; %data{$filepath}{"filepath"} = $filepath&lt;/code&gt; is kind of redundant. &lt;br /&gt;&lt;br /&gt;5) Kudos for remembering how to declare a constant.  But without the seek method, &lt;code&gt;@StartOfFile&lt;/code&gt; is never actually used in the code.&lt;br /&gt;&lt;br /&gt;6) His &lt;code&gt;save_data&lt;/code&gt; is kind of drastically more complicated than mine, because he didn't just read the rest of the file in &lt;code&gt;load_data&lt;/code&gt; and store it.  He also uses &lt;code&gt;lines&lt;/code&gt; instead of &lt;code&gt;slurp&lt;/code&gt;, which makes writing out the data a bit more complicated as well.  (Are those &lt;code&gt;.list&lt;/code&gt; statements really necessary?)&lt;br /&gt;&lt;br /&gt;7) He relies on the E03's explanation that a Str converted to Num will return NaN if it is not a valid number.  That's certainly not true of Rakudo alpha.  I'm not clear if it's true in the Perl 6 spec or not.  (Of course, I skipped that bit altogether...)&lt;br /&gt;&lt;br /&gt;So here's my second version.  I cribbed a few things from masak's version, and added an arbitrary second default directory so I could make sure that it handled having more than one file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;load_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filename&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;version&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;*&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;is&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;copy&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;./&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;peter/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;+&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.=&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;subst&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;-&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;/&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;)&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;$&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;1&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# doesn't actually work in Rakudo alpha&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;join&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;prefix&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;prefix&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filename&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;e&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;a&lt;/span&gt;&lt;span style="color: DimGray;"&gt;nd&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;100&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;s&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;e6&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Trying to open &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;open&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;r&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                    &lt;/span&gt;&lt;span style="color: DimGray;"&gt;or&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Something screwy with &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;!&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;status&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;lines&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;next&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;f&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;version&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;split&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;s&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;name vers stat costs rest&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                            &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;name&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;status&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;slurp&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; done&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;close&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;save_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;kv&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;saving &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;open&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                &lt;/span&gt;&lt;span style="color: DimGray;"&gt;or&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Something screwy with &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;!&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;print&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;:&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name vers stat&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;~&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;join&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;close&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# I've no idea what this sub was supposed to do, so let's stick with something really&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# simple for the moment.&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;amortize&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: Black;"&gt;load_data&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;filename&lt;/span&gt;&lt;span style="color: Black;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;weblog&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;version&lt;/span&gt;&lt;span style="color: Black;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;constant&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;is_active_bit&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: DarkOrange;"&gt;0x0080&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;kv&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;file&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;file&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; contains data on &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;stat&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;+^&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;is_active_bit&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;:=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;prompt&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Inflation rate: &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;ntil&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;sort&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;amortize&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Total expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Major expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1000&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Minor expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1000&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Odd expenditures: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# save_data(%data, log =&amp;gt; {name=&amp;gt;'metalog', vers=&amp;gt;1, costs=&amp;gt;[], stat=&amp;gt;0});&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;save_data&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-7377521945063490461?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/7377521945063490461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-second-stab.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7377521945063490461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7377521945063490461'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-second-stab.html' title='E03 Second Stab'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-7643316138417022412</id><published>2010-02-19T07:12:00.000-08:00</published><updated>2010-02-19T07:28:26.614-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>E03 First Stab</title><content type='html'>Well, this one is weird.  The original program strikes me as almost non-sensical, and is missing a key subroutine, &lt;code&gt;amortize&lt;/code&gt;.  It also features a lot of Perl 6 wildly changed since it was written.  Still, here's a stab at what I think it is trying to do.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;load_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filename&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;version&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;*&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;is&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;copy&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;./&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;+&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# @dirpath&amp;gt;&amp;gt;.subst(/c/, {$1/});&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;dirpath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;prefix&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;prefix&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filename&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;e&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;a&lt;/span&gt;&lt;span style="color: DimGray;"&gt;nd&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;100&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;s&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;e6&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Trying to open &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;open&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;r&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                    &lt;/span&gt;&lt;span style="color: DimGray;"&gt;or&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Something screwy with &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;!&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;status&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;lines&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;next&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;f&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;version&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;split&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;s&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;name vers stat costs rest&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                            &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;name&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;vers&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;status&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;slurp&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; done&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;close&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;save_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;kv&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;saving &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;open&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                &lt;/span&gt;&lt;span style="color: DimGray;"&gt;or&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Something screwy with &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;filepath&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;!&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;print&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;:&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name vers stat&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;~&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;join&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;fh&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;close&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# I've no idea what this sub was supposed to do, so let's stick with something really&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# simple for the moment.&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;amortize&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: Black;"&gt;load_data&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;filename&lt;/span&gt;&lt;span style="color: Black;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;weblog&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;version&lt;/span&gt;&lt;span style="color: Black;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;is_active_bit&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: DarkOrange;"&gt;0x0080&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;kv&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;file&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;file&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; contains data on &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;name&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;stat&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;+^&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;is_active_bit&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;:=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# while my $inflation = prompt('Inflation rate: ') &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# print &amp;quot;Inflation rate: &amp;quot; and $inflation = +&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;#     until $inflation != NaN;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1.2&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;inflation&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;sort&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;amortize&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Total expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Major expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1000&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Minor expenditure: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1000&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Odd expenditures: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;costs&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# save_data(%data, log =&amp;gt; {name=&amp;gt;'metalog', vers=&amp;gt;1, costs=&amp;gt;[], stat=&amp;gt;0});&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;save_data&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;data&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Some random notes:&lt;br /&gt;1) The original code references &lt;code&gt;@last_dirpath&lt;/code&gt; and &lt;code&gt;@std_dirpath&lt;/code&gt; but nowhere are they defined, nor would they ever get used.  I have simply taken them out.&lt;br /&gt;&lt;br /&gt;2) The original code used a hyper-smartmatch with a &lt;code&gt;s//&lt;/code&gt; substitution.  To the best of my knowledge, that's never worked in Rakudo... um, almost said master, but I guess it's called "alpha" now.  I tried replacing it with a hyper-&lt;code&gt;.subst&lt;/code&gt;, but I couldn't get that to parse, either.  I just skipped over this bit.&lt;br /&gt;&lt;br /&gt;3) The original tried to create a read/write filehandle, stash it after reading, store it, and re-write the file entirely using seek and truncate.  Neither of those functions exist in alpha as far as I can tell, so I just rewrote it to read the entire file when loading, and then open a new file in write mode when saving.  This seems more sensible anyway, and has the benefit of working.&lt;br /&gt;&lt;br /&gt;4) The original used ofs to set the output field separator.  That's deprecated, so I just used a simple join statement to do the same thing.&lt;br /&gt;&lt;br /&gt;5) I couldn't figure out how to get the code to get inflation from a user prompt, so I just hard-coded inflation to be... um... 20%.  That seems kind of high now that I think about it.  (And what is it with these old example programs and reading data from a prompt?  That's something I've never wanted to do in more than a decade of Perl 5 programming...)&lt;br /&gt;&lt;br /&gt;6) The four-line hyper-times, map, sort, map operation becomes a simple one-liner in modern Perl 6.&lt;br /&gt;&lt;br /&gt;7) For some reason, the "Total expenditure" line prints the individual contents of &lt;code&gt;@costs&lt;/code&gt; rather than the sum.  No clue what's going on there.&lt;br /&gt;&lt;br /&gt;8) Simple greps instead of the original's custom filters.&lt;br /&gt;&lt;br /&gt;9) Use a simple map to get every other cost, because &lt;code&gt;1, 3 ... *&lt;/code&gt; doesn't work in alpha.&lt;br /&gt;&lt;br /&gt;And that's it, I think.  It's kind of weird and ugly, but I think it does do what it's supposed to.  (I mean, it does do something, and I think that what it does is what the original code intended.  But given the oddness of the original, who knows?)&lt;br /&gt;&lt;br /&gt;I look forward to seeing what masak does with this one...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-7643316138417022412?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/7643316138417022412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-first-stab.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7643316138417022412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7643316138417022412'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-first-stab.html' title='E03 First Stab'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-4722713177901489744</id><published>2010-02-13T05:13:00.000-08:00</published><updated>2010-02-13T05:19:28.812-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>E03 Challenge</title><content type='html'>So, masak issued a challenge in the comments of my last post, and I'd like to throw it open to everyone.  Just like we both updated E02 for modern Perl 6, we are going to try to independently update &lt;a href="http://dev.perl.org/perl6/doc/design/exe/E03.html"&gt;E03&lt;/a&gt; and compare results on Friday, February 19th.  This one looks significantly tougher and more interesting than the last, so I'm looking forward to see what other people can come up with!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-4722713177901489744?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/4722713177901489744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-challenge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4722713177901489744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4722713177901489744'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/e03-challenge.html' title='E03 Challenge'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-7216643542269341932</id><published>2010-02-11T04:05:00.001-08:00</published><updated>2010-02-11T06:38:28.002-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Binary Tree Complete</title><content type='html'>masak responded to &lt;a href="http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree-almost-complete-script.html"&gt;my last post&lt;/a&gt; with a very nice &lt;a href="http://use.perl.org/~masak/journal/40159"&gt;post&lt;/a&gt; and &lt;a href="http://gist.github.com/294621"&gt;script&lt;/a&gt; of his own.  His code implemented the two features I left out from the original, and added several other very nice touches.  I've updated my own script, stealing liberally from his and adding a few wrinkles of my own.  I think this is about as far as a script which tries to stick pretty close to the original can go -- but then, I think there is still a lot of room for improvement by moving away from the original and fully embracing Perl 6.&lt;br /&gt;&lt;br /&gt;So here's &lt;a href="http://gist.github.com/301457"&gt;my new script&lt;/a&gt;.  (Apologies for not posting it in-line here, but something in it breaks my copy of &lt;code&gt;Syntax::Highlight::Perl6&lt;/code&gt; and I don't have time to sort out how to fix it.)  A quick overview of the changes:&lt;br /&gt;&lt;br /&gt;1. I've incorporated masak's &lt;code&gt;role Found&lt;/code&gt; verbatim.  This implements a big piece of the functionality of the original that I left out in my previous attempt.  (Personally, I think this is a rather silly use of roles, but that's not masak's fault, he's just matching the original script here.)&lt;br /&gt;&lt;br /&gt;2. I tried to take masak's revamped &lt;code&gt;show&lt;/code&gt; function to its logical conclusion.  He changed it to return nodes in the iteration with &lt;code&gt;take&lt;/code&gt;, so that you have to call &lt;code&gt;gather&lt;/code&gt; before calling it.  To my taste this combines brilliance with wrongness.  I took his code, reversed his left and right so things came out in the right order, renamed &lt;code&gt;show&lt;/code&gt; to &lt;code&gt;traverse&lt;/code&gt;, and -- here is the key, IMO -- created a new function, &lt;code&gt;collect&lt;/code&gt; which does &lt;code&gt;gather&lt;/code&gt; and then calls &lt;code&gt;traverse&lt;/code&gt;.  I think this is going to be a really common idiom for iterating over recursive data structures in Perl 6.&lt;br /&gt;&lt;br /&gt;3. That has the side effect of making printing the tree very elegant: &lt;code&gt;say "Pre order:   { collect(%root, pre-order) }";&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;4. I grabbed masak's use of &lt;code&gt;prompt&lt;/code&gt; verbatim, too.  What a nifty little function!&lt;br /&gt;&lt;br /&gt;5. I added a &lt;code&gt;say&lt;/code&gt; at the end of the loop, so you get a proper newline and message indicating that the program has ended successfully.&lt;br /&gt;&lt;br /&gt;6. I switch to &lt;code&gt;%tree&lt;/code&gt; throughout, at masak's suggestion, and also switched &lt;code&gt;Hash.new&lt;/code&gt; to &lt;code&gt;{}&lt;/code&gt;.  masak++&lt;br /&gt;&lt;br /&gt;I think next I'll take a stab at rewriting this using a class instead of a hash.  And I see there has been crazy progress on ng lately, so with any luck it will be ready to handle the ABC project after that...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-7216643542269341932?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/7216643542269341932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/blog-post.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7216643542269341932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7216643542269341932'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/blog-post.html' title='Binary Tree Complete'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-6493402041955332850</id><published>2010-02-04T04:08:00.000-08:00</published><updated>2010-02-04T05:02:22.940-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Binary Tree, Almost Complete Script</title><content type='html'>So, I played around with the binary tree script a bit more after posting yesterday.  It was mostly very straightforward once I figured out how to make it work with "is rw".  Here's what I've got now:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# bintree - binary tree demo program &lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# adapted from &amp;quot;Perl Cookbook&amp;quot;, Recipe 11.15&lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# converted to modern Perl 6 by SF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;use&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;v&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;6&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DimGray;"&gt;.&lt;/span&gt;&lt;span style="color: DimGray;"&gt;.&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;000&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;pick&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;20&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;insert&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;enum&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pre in post&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Pre order:  &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;; &lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;pre&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;  &lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;In order:   &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;; &lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;in&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;;   &lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Post order: &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;; &lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;post&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;; &lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;#        $ARGS prompts(&amp;quot;Search? &amp;quot;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;*&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;ARGS&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;search&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Found &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; at &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;: &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# say &amp;quot;(again!)&amp;quot; if $node&amp;lt;VALUE&amp;gt;.Found &amp;gt; 1;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;else&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;No &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; in tree&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;#########################################&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;insert&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;Hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;is&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rw&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;Int&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;unless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;LEFT&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;  &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;VALUE&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# but Found(0);&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;insert&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;LEFT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;  &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;elsif&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;insert&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;else&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;                        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;warn&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;dup insert of &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;show&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;LEFT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;post&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;     &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;f&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;pre&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;print&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;LEFT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;     &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;f&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;post&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;show&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;mode&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;TraversalMode&lt;/span&gt;&lt;span style="color: Black;"&gt;::&lt;/span&gt;&lt;span style="color: Black;"&gt;pre&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;     &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;search&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;is&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rw&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;value&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;search&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;value&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;??&lt;/span&gt;&lt;span style="color: DimGray;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;LEFT&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;!&lt;/span&gt;&lt;span style="color: DimGray;"&gt;!&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;value&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;VALUE&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;value&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# $tree&amp;lt;VALUE&amp;gt; but Found($tree&amp;lt;VALUE&amp;gt;.Found+1);&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Let me highlight the big differences between this and the &lt;a href="http://dev.perl.org/perl6/doc/design/exe/E02.html"&gt;Exegesis 2 version&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;1) Using &lt;code&gt;pick&lt;/code&gt; instead of &lt;code&gt;rand&lt;/code&gt;.  It's not shorter, but IMO &lt;code&gt;pick&lt;/code&gt; is definitely more idiomatic.  &lt;code&gt;pick&lt;/code&gt; is also more correct, in some sense: the original code clearly did not want duplicate numbers, warning the user when they happened.  With &lt;code&gt;pick&lt;/code&gt; that never happens.&lt;br /&gt;&lt;br /&gt;2) enum instead of trying to emulate the idea with &lt;code&gt;is constant = (0..2)&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;3) Oh yes, using &lt;code&gt;%root&lt;/code&gt; instead of &lt;code&gt;$root&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;4) Apparently &lt;code&gt;$ARGS prompts("Search? ");&lt;/code&gt; was meant to create a prompt to get input from the user if there's nothing on the command line?  I've no idea if that facility still exists in Perl 6, or was ever implemented in Rakudo.&lt;br /&gt;&lt;br /&gt;5) Also skipped the Found role.  I'm not sure how the old code expected it work without defining Found.  I think they were trying to prove a point about roles, because the whole idea would be more easily implemented using another field in the hash.&lt;br /&gt;&lt;br /&gt;6) In &lt;code&gt;insert&lt;/code&gt;, instead of sticking &lt;code&gt;undef&lt;/code&gt; in the left and right fields, I actually create empty Hash objects.  As you can see in my last post, I originally created undefined Hash objects, but this worked better for me.  In practice, it might be better to leave these out entirely until they are needed, but this matches the logic of the old version.&lt;br /&gt;&lt;br /&gt;7) In &lt;code&gt;show&lt;/code&gt;, I've converted it to use sub arguments rather than all that ugly &lt;code&gt;@_&lt;/code&gt; stuff.  I've no idea why the original code didn't do that in the first place, unless it was to show that &lt;code&gt;@_&lt;/code&gt; still worked.&lt;br /&gt;&lt;br /&gt;8) In &lt;code&gt;search&lt;/code&gt;, I've changed it from a boolean logical expression to a simple ternary &lt;code&gt;?? !!&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;I guess I should look at coding up a Found role, and then trying to use it correctly.  Thought honestly, I'm more inclined to completely rewrite this as a binary tree class, which I think would do wonders for the code even as it wandered far away from the shape of the original.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-6493402041955332850?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/6493402041955332850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree-almost-complete-script.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/6493402041955332850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/6493402041955332850'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree-almost-complete-script.html' title='Binary Tree, Almost Complete Script'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-6207086736664655148</id><published>2010-02-03T11:33:00.000-08:00</published><updated>2010-02-03T11:57:47.046-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Binary Tree</title><content type='html'>So, while reading over #perl6 today, I noticed comments about how out-of-date &lt;a href="http://dev.perl.org/perl6/doc/design/exe/E02.html"&gt;Exegesis 2's first example&lt;/a&gt; was.  Even the updates to it are out of date!  I thought it would be fun and simple to update it to working modern Perl 6, as embodied in Rakudo master.  (As ng has still not landed.)&lt;br /&gt;&lt;br /&gt;Well, it seemed like a good idea when I started.  However, I've run into an odd issue.  Here's my simplified which doesn't work:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# bintree - binary tree demo program &lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# adapted from &amp;quot;Perl Cookbook&amp;quot;, Recipe 11.15&lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# converted to modern Perl 6 by SF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;use&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;v&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;6&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;n&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DimGray;"&gt;.&lt;/span&gt;&lt;span style="color: DimGray;"&gt;.&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;000&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;pick&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;2&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Inserting &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;insert&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;root&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;keys&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Doom&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;#########################################&lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;insert&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;Hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;is&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rw&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;Int&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;unless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;LEFT&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;  &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;VALUE&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;# but Found(0);&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;node&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;insert&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;LEFT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;  &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;elsif&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;VALUE&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;insert&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;else&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;                        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;warn&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;dup insert of &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;val&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And here's sample output:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;Inserting 640&lt;br /&gt;{"VALUE" =&gt; 640, "RIGHT" =&gt; Hash, "LEFT" =&gt; Hash}&lt;br /&gt;{"VALUE" =&gt; 640, "RIGHT" =&gt; Hash, "LEFT" =&gt; Hash}&lt;br /&gt;{}&lt;br /&gt;Inserting 461&lt;br /&gt;{"VALUE" =&gt; 461, "RIGHT" =&gt; Hash, "LEFT" =&gt; Hash}&lt;br /&gt;{"VALUE" =&gt; 461, "RIGHT" =&gt; Hash, "LEFT" =&gt; Hash}&lt;br /&gt;{}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If you match that back up with the says in the code, you'll see that a value is assigned to &lt;code&gt;$tree&lt;/code&gt; in &lt;code&gt;insert&lt;/code&gt;, but that value does not make it back to the point where &lt;code&gt;insert&lt;/code&gt; is called, despite &lt;code&gt;$tree is rw&lt;/code&gt;.  I've no idea why this should be the case, the same sort of code seems to work quite well in the REPL.  Does anyone have an idea?  Am I doing something stupid here, or did I just find a bug in a very-soon-to-be-obsolete version of Rakudo?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Not sure if this is just something I don't understand or a rakudobug.  It turns out that the problem is the line &lt;code&gt;$tree = %node&lt;/code&gt;.  If I use equals to assign something to &lt;code&gt;$tree&lt;/code&gt;, that doesn't get passed back out.  On the other hand, if I add hash keys directly to &lt;code&gt;$tree&lt;/code&gt;, they are passed out just like I would expect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-6207086736664655148?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/6207086736664655148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/6207086736664655148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/6207086736664655148'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree.html' title='Binary Tree'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-3124127917516215630</id><published>2010-01-28T22:38:00.000-08:00</published><updated>2010-01-28T22:52:25.981-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Holding Pattern Continued</title><content type='html'>Well, a week has gone by, and Rakudo's ng branch is definitely not ready for prime time yet.  It's completely understandable, but it does put a bit of a kink in my plan to start working on getting actions attached to the Perl 6 ABC grammar using ng.&lt;br /&gt;&lt;br /&gt;Okay, then, I guess the thing to do is to find a goal for the project that can be done now.  And hey, there it is!  I will attempt to get my hands on some examples of Irish traditional music (again, as colomon suggested) and make sure they work in our current parser.  In turn, that will require a decent way of checking whether an entire tune has been read into the grammar or not.  That sounds like a solid goal for the next week...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-3124127917516215630?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/3124127917516215630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/holding-pattern-continued.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/3124127917516215630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/3124127917516215630'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/holding-pattern-continued.html' title='Holding Pattern Continued'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-4282488339946549974</id><published>2010-01-21T18:46:00.000-08:00</published><updated>2010-01-21T19:07:28.396-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Holding Pattern</title><content type='html'>Well, I meant to get to adding actions to my grammar.  But I have a great excuse for not making progress.  At the moment, there is a big push underway in Rakudo development to replace the current master branch with the ng branch.  As I understand it, ng implements actions a bit differently than master -- it is more true to the Perl 6 spec.  But right now, ng isn't ready to use, and there's not much point in targeting an out-of-date implementation that is going to go away in the next couple of weeks.  So I'm putting this on hold until ng is in place.&lt;br /&gt;&lt;br /&gt;If you're following along at home, I did go ahead and add grace notes, chords, nth endings, and rolls and staccato markings.  It's so straightforward it's not really describing how I did it, but it is uploaded to &lt;a href="http://github.com/LastOfTheCarelessMen/ABC"&gt;github&lt;/a&gt; if you'd like to try it.  I don't know if it will properly support Irish music yet, as a commenter requested last time, but it ought to be closer, anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-4282488339946549974?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/4282488339946549974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/holding-pattern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4282488339946549974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4282488339946549974'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/holding-pattern.html' title='Holding Pattern'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-2748143930895770992</id><published>2010-01-14T08:16:00.000-08:00</published><updated>2010-01-14T08:37:33.454-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Putting it together</title><content type='html'>Just to get more dramatic results, here's script to check if an ABC tune can be played on a one-row button accordion in G.  It's pretty easy to put together given what we've got so far:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;use&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;v&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;6&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Black;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;push&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;*&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;INC&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;lib&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;use&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;ABC&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;matches&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;*&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;IN&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;slurp&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;comb&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;tune&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;:&lt;/span&gt;&lt;span style="color: Black;"&gt;match&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;dg_notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;g&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;a&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;b&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;c&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;d&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;e&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^f&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;matches&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;header&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;header_hash&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::tune&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;header&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;header&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;T&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;gather&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::tune&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;line_of_music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;line&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;   &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;line&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;       &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;element&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;                &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;          &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;key_signature&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;key_signature&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;header&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;K&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;trouble&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;apply_key_signature&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;key_signature&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;!&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;dg_notes&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;exists&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;lc&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;trouble&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;perl&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Basically, we set up &lt;code&gt;@matches&lt;/code&gt; with all the tunes in the file, and &lt;code&gt;%dg_notes&lt;/code&gt; with all the notes that can be played (though it's actually just the key of G for now).  Then for each tune, we loop through and collect all the notes, factored into the appropriate key signature.  Then we just grep against the notes that are allowed to make a list of the notes not present on a G accordion.  Here are the results on my sample file:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Cuckold Come Out o' the Amrey:&lt;br /&gt;["^c", "^c", "^c", "^c", "^c", "^c", "^c", "^c", "=f", "^c", "^c", "^c", "^c"]&lt;br /&gt;Elsie Marley:&lt;br /&gt;["=F", "=f"]&lt;br /&gt;Peacock Followed the Hen. JWDM.07:&lt;br /&gt;[]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So in this case, "Cuckold" has a bunch of c-sharps and an f-natural, "Elsie Marley" has a couple of f-naturals, and "Peacock" is solidly playable on a G accordion.&lt;br /&gt;&lt;br /&gt;While this approach has been fun, I think it's time to dig in use Perl 6 grammar actions to build a smarter data structure for ABC tunes.  Should be exciting...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-2748143930895770992?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/2748143930895770992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/putting-it-together.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/2748143930895770992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/2748143930895770992'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/putting-it-together.html' title='Putting it together'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-4146786411297086693</id><published>2010-01-06T12:26:00.000-08:00</published><updated>2010-01-06T13:00:06.757-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexes'/><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Extracting the Tunes from a File</title><content type='html'>Just a quick post today.  While reworking my test script for the DG accordion testing program, I decided it would be better if the script could accept an ABC file with multiple tunes in it.  After about ten minutes of fiddling around, I came up with this:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;my @matches = $*IN.slurp.comb(m/ &amp;lt;ABC::tune&amp;gt; /, :match);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Actually, that's a lie.  I just came up with that a second ago, when I said to myself, "Wait a minute, maybe slurp works on &lt;code&gt;$*IN&lt;/code&gt;?"  Previously I was using &lt;code&gt;lines&lt;/code&gt; and &lt;code&gt;join&lt;/code&gt; to get the same effect.&lt;br /&gt;&lt;br /&gt;The scary thing is, that's just the cleanest way I've been able to find to do it in Rakudo.  In ideal Perl 6, I believe you could just say&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;my @matches = slurp.comb(m/ &amp;lt;ABC::tune&amp;gt; /, :match);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I believe in ideal Perl 6 that would be lazy, too, using the &lt;code&gt;Cat&lt;/code&gt; class internally to get a lazy string.&lt;br /&gt;&lt;br /&gt;Anyway, that gives you an array of &lt;code&gt;Match&lt;/code&gt; objects, one for each ABC tune in the file.  But there is one big gotcha with this formulation: if something happens to abort parsing the &lt;code&gt;ABC::tune&lt;/code&gt; early (say it hits an ABC directive we haven't implemented yet), comb will merrily skip the rest of the tune without any warning.  So this is probably a less than ideal approach in the long run.   But my attempts to make a regex for the entire file have failed so far, and this works quite nicely on my sample data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-4146786411297086693?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/4146786411297086693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/extracting-tunes-from-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4146786411297086693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4146786411297086693'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2010/01/extracting-tunes-from-file.html' title='Extracting the Tunes from a File'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-171489061860843880</id><published>2009-12-30T17:56:00.000-08:00</published><updated>2009-12-30T18:10:13.494-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Key signatures</title><content type='html'>After making my last post, I was brimming over with confidence.  Obviously I'd done all the hard bits, and it was just a matter of putting the pieces together, right?&lt;br /&gt;&lt;br /&gt;Wrong.  Perl 6 makes parsing the ABC data so darned easy that the next bit seems completely unreasonable.  At least, I haven't figured out a way to make it elegant yet.  Figuring out which sharps or flats are in a key signature is tricky stuff, and as far as I can figure, Perl 6 doesn't really have any clever tools to make it easier.&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;sub&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;key_signature&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;key_signature_name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;keys&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;C&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;G&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;D&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;2&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;A&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;3&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;E&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;5&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;F#&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;6&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;C#&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;7&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;F&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Bb&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;2&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Eb&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;3&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Ab&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Db&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;5&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Gb&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;6&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Cb&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;7&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;key_signature_name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;basenote&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;#&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;b&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;)&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;?&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;h&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;*&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;(&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;w&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;*&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;)&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Illegal key signature&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;u&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;nless&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;lookup&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;[&lt;/span&gt;&lt;span style="color: DimGray;"&gt;~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;ABC::basenote&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;uc&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;keys&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;lookup&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;defined&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;given&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;~&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;     &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;           &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;maj&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;           &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;ion&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;           &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;mix&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;dor&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;2&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;   &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;3&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;aeo&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;3&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;phr&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;4&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;loc&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;5&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;lyd&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;+&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;default&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;     &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Unknown mode &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; requested&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;sharp_notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;F C G D A E B&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;given&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DimGray;"&gt;..&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;7&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;  &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;^&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;sharp_notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;[&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;7&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;.&lt;/span&gt;&lt;span style="color: DimGray;"&gt;.&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;^&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;-&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;sharps&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;sharp_notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;6&lt;/span&gt;&lt;span style="color: DimGray;"&gt;-&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;i&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;return&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;%&lt;/span&gt;&lt;span style="color: DarkOrange; font-weight: bold;"&gt;hash&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Basically, we do a match to rip the key signature name into its component pieces.  The classic Highland piping key of "Amix", for instance, needs to be recognized as "A", no sharp or flat, "mix"olydian.  We use the first two bits to lookup the corresponding major key signature, then use the last bit as a modifier.  When we're done, we have the number of sharps or (if negative) flats.  We then use that count to figure out which notes need to be sharp or flat.&lt;br /&gt;&lt;br /&gt;It doesn't sound that bad, but it was pretty tricky to implement.  It also (likely) has some holes in it.  For example, the ugly key signture of C-flat minor (4 flats and 3 double flats!) will fail.  Of course, any sane person would write that as B minor (two sharps).  Also, the ABC spec allows you to explicitly specify exceptions to the normal key signature rules.  I haven't even tried to implement that yet.&lt;br /&gt;&lt;br /&gt;This is definitely one of those cases were any suggested improvements will be very welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-171489061860843880?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/171489061860843880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/key-signatures.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/171489061860843880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/171489061860843880'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/key-signatures.html' title='Key signatures'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-8898478057392733546</id><published>2009-12-28T19:11:00.000-08:00</published><updated>2009-12-28T19:17:20.247-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Getting all the notes</title><content type='html'>I hope everyone had lovely holidays!  I've spent a bit of time while away fiddling with my idea for a script to determine if a given tune can be played on a D/G button accordion.  I've hit on a bit of a snag, as the code to determine what sharps or flats are in a given key signature is more complicated than I was thinking.  It will probably take me a few more days to sort that out, but in the meantime, here is my first stab at extracting all the pitches from an ABC tune:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;abc&lt;/span&gt; &lt;span style="color: DimGray;"&gt;~~&lt;/span&gt; &lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;tune&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Black;"&gt;die&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Tune not matched&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;\&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;n&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;unless &lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt; &lt;span style="color: DimGray;"&gt;~~&lt;/span&gt; &lt;span style="color: Black;"&gt;Match&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;notes&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: Black;"&gt;gather&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;ABC::tune&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;line_of_music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;line&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;line&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;   &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;element&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;            &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;when&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;          &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;take&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: Brown; font-weight: bold;"&gt;notes&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;I'm suspecting there is a lovely Perl 6 idiom I don't quite have yet to squish all the for statements into a series of maps, but this works fine for the time being.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-8898478057392733546?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/8898478057392733546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/getting-all-notes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/8898478057392733546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/8898478057392733546'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/getting-all-notes.html' title='Getting all the notes'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-4399461230967755965</id><published>2009-12-20T12:05:00.000-08:00</published><updated>2009-12-20T12:20:25.484-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexes'/><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Got It!</title><content type='html'>I've now got a simple working ABC tune parser.  (Well, working in at least so far as it passed all the tests I've thought up so far.)  Once I cracked the whitespace issue, the remaining piece fell into shape quickly.  Figuring out that &lt;code&gt;\h&lt;/code&gt; and &lt;code&gt;\v&lt;/code&gt; were useful for horizontal and vertical whitepsace also helped.  Here's the grammar I'm using now:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;use&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;v&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;6&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color DarkRed;"&gt;grammar&lt;/span&gt;&lt;span style="color DarkRed;"&gt; &lt;/span&gt;&lt;span style="color DarkRed;"&gt;ABC&lt;/span&gt;&lt;span style="color DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header_field_name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header_field_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;N&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header_field&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;^^&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header_field_name&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;s&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header_field_data&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;$$&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header_field&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;v&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;basenote&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;a..g&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;+&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;A..G&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;octave&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;accidental&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;__&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;=&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;pitch&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;tie&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;-&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;note_length&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;d&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;d&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;note&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;tie&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rest_type&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;x..z&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rest&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;rest_type&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;gracing&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;alpha&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;spacing&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;h&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;broken_rhythm_bracket&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;g1&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;=&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm_bracket&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;g2&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;=&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;element&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;spacing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;barline&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;::&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;element&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;line_of_music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;bar&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;line_of_music&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;s&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;v&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;tune&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;music&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;This will successfully parse the sample ABC I gave in my first post on this topic.&lt;br /&gt;&lt;br /&gt;Where to go from here?  1) I'd like to write a simple script that can put the grammar to work as is.  I'm thinking maybe a script which can test if a tune is playable on a D/G accordion.  2) So far, the grammar only supports a subset of ABC.  Off the top of my head, it doesn't support chords (either as labels above the music or as more than one notehead at once) and it doesn't support in-line key changes or time changes.  I'm guessing these will be fairly easy to add.  3) I'd like to be able to map the parse to actual Perl 6 classes to make the ABCs easier to manipulate.  4) I'd like to be able to use those classes to write out ABCs.&lt;br /&gt;&lt;br /&gt;So much to do!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-4399461230967755965?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/4399461230967755965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/got-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4399461230967755965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4399461230967755965'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/got-it.html' title='Got It!'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-5796816387071947605</id><published>2009-12-20T06:07:00.001-08:00</published><updated>2009-12-20T08:38:03.695-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexes'/><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Infinite Loops</title><content type='html'>Well, I tried reformulating the line of music regex, and have what I think is a nice version, with one major catch.  Here's the new regexes:&lt;br /&gt;&lt;pre&gt;    &lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;element&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;barline&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;::&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;element&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;line_of_music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;$$&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;element&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;$$&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As is, this passes without issues:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;g&amp;gt;ecgece/f/g/e/|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;bar&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;isa_ok&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;bar recognized&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::bar&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;g&amp;gt;ecgece/f/g/e/|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Entire bar was matched&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::bar&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;element&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;~&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;g&amp;gt;e c g e c e/ f/ g/ e/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Each element was matched&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::bar&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;Barline was matched&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;I think that's a suitably elegant test.&lt;br /&gt;&lt;br /&gt;There's only one problem here.  Real ABC allows for spaces between elements, which makes the ABC format much more legible.  (I would like this code in the long run to be able to take an ABC tune, process it, and write it back out again, so ideally the code needs to carefully note the whitespace so it can be output again later.)  But when I try to add &lt;code&gt;&amp;lt;ws&amp;gt;+&lt;/code&gt; alternative to the element regex, and try to parse a bar of music with a space or two in it, it appears to just hang.  &lt;br /&gt;&lt;br /&gt;This one has me utterly stumped; do any of the Perl 6 regex experts out there have a clue what could be going on?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update:&lt;/span&gt; Still unable to make &lt;code&gt;&amp;lt;ws&amp;gt;&lt;/code&gt; work for me, but had great luck with just using good old &lt;code&gt;\s&lt;/code&gt;.  So the code works now, but I'd still love an explanation...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update to the Update: &lt;/span&gt; Argh, &lt;code&gt;bar&lt;/code&gt; works but &lt;code&gt;line_of_music&lt;/code&gt; still hangs.  Dang it, I feel like I'm sooooooo close to getting this thing working....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update^3:&lt;/span&gt; Ah, I simply had a completely broken &lt;code&gt;line_of_music&lt;/code&gt;.  I've got a simpler one working now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-5796816387071947605?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/5796816387071947605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/infinite-loops.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5796816387071947605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5796816387071947605'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/infinite-loops.html' title='Infinite Loops'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-1776628945636861782</id><published>2009-12-18T18:10:00.000-08:00</published><updated>2009-12-18T18:22:04.672-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Moritz++</title><content type='html'>Going over the #perl6 backlog today, I noticed that Moritz had two suggestions for me based on my last post.  The first was a nice suggestions to use given in my tests:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;d'+p+&amp;lt;&amp;lt;&amp;lt;+accent+_B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;isa_ok&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;d+p+&amp;lt;&amp;lt;&amp;lt;+accent+_B&amp;quot; is a broken rhythm&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;given&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;d&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note is d&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note has an octave tick&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note has no accidental&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note has no length&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;g1&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+p+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first gracing is +p+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm_bracket&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;angle is &amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;g2&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+accent+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second gracing is +accent+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note is B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note has no octave&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note is flat&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note has no length&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;This is far from the amazing new testing form I was hoping to find, but it sure is a big improvement over what I had.  If I don't think of something else better, I will go back and redo all of the longer test cases this way.&lt;br /&gt;&lt;br /&gt;He also said about the barline regex, "Looks like it would need LTM to work."  I believe he's talking about &lt;a href="http://perlcabal.org/syn/S05.html#Longest-token_matching"&gt;longest-token matching&lt;/a&gt;, but I don't fully understand the issues, I fear.  I did finally write tests for this case:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;::&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;isa_ok&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;barline &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; recognized&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;barline &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; is correct&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;And they didn't work -- sometimes it would match the first barline it recognized rather than the longest.  Moritz also suggested, "Reordering the longest alternatives to the front would help," so I did, and then all the tests passed.  I hope that means the problems are actually gone, and not just that I've managed to hide them for the moment.&lt;br /&gt;&lt;br /&gt;Anyway, big kudos for Moritz!  Thanks to him, it definitely feels like I am getting closer here.  Now if I can just figure out the proper way to ask for an entire line of ABC music in Perl 6, I will be there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-1776628945636861782?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/1776628945636861782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/moritz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1776628945636861782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1776628945636861782'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/moritz.html' title='Moritz++'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-5930845014437091924</id><published>2009-12-17T05:01:00.000-08:00</published><updated>2009-12-18T10:30:20.151-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexes'/><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Now With Grammar And Tests</title><content type='html'>I've made a huge amount of progress with the ABC project in the last 36 hours.  At this point I think I've just got a few more rules to write and debug before we are able to completely parse the sample ABC tune I posted several days ago.  (Naturally they'll be the trickiest, I imagine.)&lt;br /&gt;&lt;pre&gt;&lt;span style="color DarkRed;"&gt;grammar&lt;/span&gt;&lt;span style="color DarkRed;"&gt; &lt;/span&gt;&lt;span style="color DarkRed;"&gt;ABC&lt;/span&gt;&lt;span style="color DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header_field_name&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header_field_data&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;N&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header_field&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;^^&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header_field_name&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;s&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header_field_data&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;$$&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header_field&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;n&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;basenote&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;a..g&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;+&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;A..G&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;octave&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;accidental&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;__&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;=&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;pitch&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;tie&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;-&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;note_length&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;d&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;d&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;note&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;tie&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rest_type&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;x..z&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;rest&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;rest_type&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;gracing&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;alpha&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;broken_rhythm_bracket&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;g1&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;=&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm_bracket&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;g2&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;=&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;element&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;rest&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;gracing&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;barline&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:|:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;::&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;line_of_music&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;element&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;element&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;barline&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Much, much nicer than just having "abc_" at the beginning of every regex name.  And wow, compared to any other parsing tool I've ever used, this is really, really easy.  This comes very close to matching the &lt;a href="http://www.norbeck.nu/abc/bnf/abc20bnf.htm"&gt;ABC BNF&lt;/a&gt;, though I've simplified a lot, and changed &lt;code&gt;!trill!&lt;/code&gt; to &lt;code&gt;+trill+&lt;/code&gt; (etc) to match the version of ABC present in this file.&lt;br /&gt;&lt;br /&gt;So far the only downside I've found is that it is ugly to test:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;d'+p+&amp;lt;&amp;lt;&amp;lt;+accent+_B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;ABC&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;::&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;broken_rhythm&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;isa_ok&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Match&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;d+p+&amp;lt;&amp;lt;&amp;lt;+accent+_B&amp;quot; is a broken rhythm&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;d&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note is d&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note has an octave tick&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note has no accidental&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first note has no length&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;g1&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+p+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;first gracing is +p+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;broken_rhythm_bracket&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;angle is &amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;g2&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;0&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;+accent+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second gracing is +accent+&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note is B&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note has no octave&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note is flat&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;is&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;match&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;ABC::broken_rhythm&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;1&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Black;"&gt;note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: DimGray;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;second note has no length&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;;&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;On the plus side, this does show how to get at the parsed bits.  On the downside, it's not really good at testing what is not present in the match, and it seems like any refactoring to the grammar will lead to massive changes in the tests.  I'm guessing there will be a better way of testing this in the future... or there already is and I just don't know about it.&lt;br /&gt;&lt;br /&gt;At this point, it seems to me the biggest obstacle is figuring out how to formulate &lt;code&gt;line_of_music&lt;/code&gt; so that it actually returns its results in a usable matter.  The thing is, the interleaved order of the barlines and the elements is very important to make sense of the music.  The way I'm doing it now will return an array of barlines and an array of elements, with no idea how those two arrays interact....&lt;br /&gt;&lt;br /&gt;Ack: Forgot to include mention of the word Perl here so it would get picked up by Ironman.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-5930845014437091924?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/5930845014437091924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/now-with-grammar-and-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5930845014437091924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5930845014437091924'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/now-with-grammar-and-tests.html' title='Now With Grammar And Tests'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-6544145634811326407</id><published>2009-12-16T05:52:00.000-08:00</published><updated>2009-12-16T06:04:25.435-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regexes'/><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Regexes are Wow</title><content type='html'>I've just spent the last little bit playing around with adding more regexes, and I think I'm in love.  It feels both easier to use than Perl 5 regular expressions and vastly more powerful.  Here's the latest batch I just added:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_basenote&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;a..g&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;+&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;[&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;A..G&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_octave&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;,&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_accidental&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;^^&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;_&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;__&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;=&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_pitch&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_accidental&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_basenote&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_octave&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_tie&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;-&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_note_length&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;d&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;d&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;|&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_note&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_pitch&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_note_length&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_tie&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;?&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The only difficulty I had here was not realizing at first that &lt;code&gt;abc_basenote&lt;/code&gt; needed angle brackets around the character class specification.  That caused me a few minutes of confusion, because I was trying to jump to (informally) testing more complex things built up around it, and so it wasn't immediately obvious that the base note regex was simply not working.&lt;br /&gt;&lt;br /&gt;But hey, I know how that works now, and wow!  The rest of it was dead easy and expressive to boot.  And using &lt;code&gt;.perl&lt;/code&gt; to dump the match structure is awesome.&lt;br /&gt;&lt;br /&gt;There are two things to ponder here, however.  First, having &lt;code&gt;abc_&lt;/code&gt; at the beginning of every regex is an obvious wart.  I think I can get around that by putting these in a grammar?  Must investigate.&lt;br /&gt;&lt;br /&gt;The second is that at this point, I've got enough structure to what I'm doing that I really need a test suite.  I suppose if I package the regexes in a grammar, then I can use it from another file, and test that?  Must experiment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-6544145634811326407?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/6544145634811326407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/regexes-are-wow.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/6544145634811326407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/6544145634811326407'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/regexes-are-wow.html' title='Regexes are Wow'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-5952087689269025888</id><published>2009-12-16T00:59:00.000-08:00</published><updated>2009-12-16T01:47:51.581-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Getting Started with ABC</title><content type='html'>So, in classic style, I've started off this project by just flailing around a bit.  My first thought was to try TDD.  But I very quickly realized I didn't have the first clue what the interface being tested should look like.  So I dashed off the roughest idea for some classes.  But I don't know how they are best filled.  So I am reversing course, and will start by playing around with regexes a bit, trying to learn how the new facilities in Perl 6 work.&lt;br /&gt;&lt;br /&gt;So my real starting point is pulling up &lt;a href="http://github.com/perl6/book/"&gt;The Book&lt;/a&gt; and reading up on regexes.  No pretense I understand what's going on, let me just document what happens as I go along.  BTW, this project is at &lt;a href="http://github.com/LastOfTheCarelessMen/ABC"&gt;github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, my first attempt looked like this:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;use&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;v&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;6&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;my&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;abc&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;=&lt;/span&gt; &lt;span style="color: DarkMagenta;"&gt;q&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;¬´&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;X:64&lt;br /&gt;T:Cuckold Come Out o' the Amrey&lt;br /&gt;S:Northumbrian Minstrelsy&lt;br /&gt;M:4/4&lt;br /&gt;L:1/8&lt;br /&gt;K:D&lt;br /&gt;A/B/c/A/ +trill+c&amp;gt;d e&amp;gt;deg | GG +trill+B&amp;gt;c d/B/A/G/ B/c/d/B/ |&lt;br /&gt;A/B/c/A/ c&amp;gt;d e&amp;gt;deg | dB/A/ gB +trill+A2 +trill+e2 ::&lt;br /&gt;g&amp;gt;ecg ec e/f/g/e/ | d/c/B/A/ Gd BG B/c/d/B/ | &lt;br /&gt;g/f/e/d/ c/d/e/f/ gc e/f/g/e/ | dB/A/ gB +trill+A2 +trill+e2 :|&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;¬ª&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;field&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;^^&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;$$&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;header&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;-&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;-&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;field&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;abc&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;-&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;header&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;-&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;field&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;abc-header-field&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Note how I'm trying to get with the program and use dashes in my Perl 6 identifiers!  Unfortunately, this doesn't actually work in this case:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Confused at line 15, near "abc-header"&lt;br /&gt;in Main (file &lt;unknown&gt;, line &lt;unknown&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I played around a bit, and finally ended up changing the dashes to underscores.  Changed that way it runs, but &lt;code&gt;say $&amp;lt;abc_header_field&amp;gt;;&lt;/code&gt; prints out the entire string rather than just the first header field I had expected.&lt;br /&gt;&lt;br /&gt;Aha!  Apparently the &lt;code&gt;.* $$&lt;/code&gt; sequence in &lt;code&gt;abc_header_field&lt;/code&gt; doesn't give you every up to the end of the line, as I'd expected.  Instead it matches all characters (including newlines) up until it hits the end of the file, then backtracks until it finds the last end-of-line.  Good to know.  Changing it to &lt;code&gt;\N* $$ &lt;/code&gt; works nicely.&lt;br /&gt;&lt;br /&gt;Now I tried making it match &lt;code&gt;abc_header&lt;/code&gt; instead of &lt;code&gt;abc_header_field&lt;/code&gt;.  No joy, we still just get the first header line.  Why?  Because we aren't matching the newlines between header lines!  So tweak &lt;code&gt;abc_header&lt;/code&gt; to account for the newlines, and bingo!&lt;br /&gt;&lt;pre&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_header_field&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;^^&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;w&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;:&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;'&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;N&lt;/span&gt;&lt;span style="color: Black;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;$$&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;regex&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_header&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;[&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_header_field&lt;/span&gt;&lt;span style="color: Black;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;\&lt;/span&gt;&lt;span style="color: Black;"&gt;n&lt;/span&gt;&lt;span style="color: Black;"&gt;]&lt;/span&gt;&lt;span style="color: Black;"&gt;+&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;if&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;abc&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;~~&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;m&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Darkgreen;"&gt;abc_header&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;/&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;for&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;abc_header&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;abc_header_field&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;-&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;line&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;   &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;{&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;        &lt;/span&gt;&lt;span style="color: Black;"&gt;say&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;header: &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;line&lt;/span&gt;&lt;span style="color: DarkMagenta;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;;&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;}&lt;/span&gt;&lt;span style="color: DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;And here are the new results:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;header: X:64&lt;br /&gt;header: T:Cuckold Come Out o' the Amrey&lt;br /&gt;header: S:Northumbrian Minstrelsy&lt;br /&gt;header: M:4/4&lt;br /&gt;header: L:1/8&lt;br /&gt;header: K:D&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wow.  After a couple of false starts, I've got some simple, powerful code there.  I think I like these regexes...&lt;br /&gt;&lt;br /&gt;Updated: Ugh, some weird formatting issues with the Perl 6 syntax highlighter.  Too tired to mess around with now.  Rest assured that there is a closing curly bracket in each example code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-5952087689269025888?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/5952087689269025888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/getting-started-with-abc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5952087689269025888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5952087689269025888'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/getting-started-with-abc.html' title='Getting Started with ABC'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-5070137066362030463</id><published>2009-12-11T17:26:00.000-08:00</published><updated>2009-12-11T18:54:23.397-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Intro to ABC</title><content type='html'>So, the &lt;a href="http://abcnotation.com/"&gt;ABC format&lt;/a&gt; is a simple ASCII format designed primarily to make it easy to work with single line musical notation.  It's great for, say, traditional dance tunes, like this tune from Northumberland.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;X:64&lt;br /&gt;T:Cuckold Come Out o' the Amrey&lt;br /&gt;S:Northumbrian Minstrelsy&lt;br /&gt;M:4/4&lt;br /&gt;L:1/8&lt;br /&gt;K:D&lt;br /&gt;A/B/c/A/ +trill+c&gt;d e&gt;deg | GG +trill+B&gt;c d/B/A/G/ B/c/d/B/ |&lt;br /&gt;A/B/c/A/ c&gt;d e&gt;deg | dB/A/ gB +trill+A2 +trill+e2 ::&lt;br /&gt;g&gt;ecg ec e/f/g/e/ | d/c/B/A/ Gd BG B/c/d/B/ | &lt;br /&gt;g/f/e/d/ c/d/e/f/ gc e/f/g/e/ | dB/A/ gB +trill+A2 +trill+e2 :|&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My favorite ABC program renders that like this (click on it for a high resolution version):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9hHYV_TCJg/SyMAofFlI-I/AAAAAAAAAAM/l8sKpzDAOyo/s1600-h/Cuckold.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 178px;" src="http://4.bp.blogspot.com/_E9hHYV_TCJg/SyMAofFlI-I/AAAAAAAAAAM/l8sKpzDAOyo/s400/Cuckold.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414171872569140194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, my goal here is to write a Perl 6 module that can read and understand this format, maybe do some light processing, and output it again.  I'm hoping a grammar will make this pretty easy and straightforward, but I'm fairly ignorant of them so far.  It will be an adventure!&lt;br /&gt;&lt;br /&gt;I guess my first step is to set up a class to represent a tune, and then write some tests for it.  Next time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-5070137066362030463?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/5070137066362030463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/intro-to-abc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5070137066362030463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5070137066362030463'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/intro-to-abc.html' title='Intro to ABC'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9hHYV_TCJg/SyMAofFlI-I/AAAAAAAAAAM/l8sKpzDAOyo/s72-c/Cuckold.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-5817579342823612071</id><published>2009-12-09T20:04:00.000-08:00</published><updated>2009-12-09T20:04:00.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Polynomial'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='NURBS'/><category scheme='http://www.blogger.com/atom/ns#' term='Vector'/><title type='text'>NUBS and Polynomials, with graphic</title><content type='html'>As has happened before, while putting the finishing touches on the code for this post, I suddenly realized I needed to rewrite the code before I could be happy with it.  So this post will be devoid of Perl 6 code, and just discuss what is going on in the (now-improved) graphic.&lt;br /&gt;&lt;br /&gt;The basic idea I'm illustrating here is that a NUBS curve is basically a convenient way of merging a series of partial polynomial curves.  In this graphic, the NUBS curve is in black.  The polynomials are in red, green, and blue.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i49.tinypic.com/j64s28.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 700px; height: 700px;" src="http://i49.tinypic.com/j64s28.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you start where the red doesn't overlap the black, and then follow it to the black and follow the black beyond that, you can trace the curve and get an idea of what is going on.  Basically, the black NUBS curve follows one section of the red polynomial, then smoothly switches to a section of the green polynomial, and finally switches to a section of the blue polynomial.  It is piecewise polynomial, in other words, with smooth transitions.  (It is possible to generate unsmooth transitions too with a NUBS, or even out-and-out discontinuities, but generally this is not wanted.)&lt;br /&gt;&lt;br /&gt;The other great thing about NUBS is how natural they are to specify, because their control points conform roughly to the shape of the curve, and modifying them changes the curve in a fairly natural fashion.  I don't have time to go into great depth here, but here's a quick comparison.  First, here's the code to specify the curve in the picture:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;my @control_points = (Vector.new(-1, -2),&lt;br /&gt;                      Vector.new(1, 0),&lt;br /&gt;                      Vector.new(1, 1),&lt;br /&gt;                      Vector.new(0, 1),&lt;br /&gt;                      Vector.new(1, 2),&lt;br /&gt;                      Vector.new(1, 2),&lt;br /&gt;                      Vector.new(1, 2));&lt;br /&gt;my @knots = (-1, -1, -1, -1, 1, 2, 2, 3, 3, 3, 3);&lt;br /&gt;my Nubs $nubs = Nubs.new(3, KnotVector.new(@knots), @control_points);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then here's the red polynomial:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(0.194444444444444, 0.111111111111111) x^3 &lt;br /&gt;+ (-0.916666666666667, -0.666666666666667) x^2 &lt;br /&gt;+ (0.583333333333333, 1.33333333333333) x^1 &lt;br /&gt;+ (0.694444444444444, 0.111111111111111) x^0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Actually, that's a fairly clean polynomial in this case, but even so, it's hard to work with.  The bit we're interested in is parameterized from -1 to 1, so for instance, to find the starting point we need to evaluate the polynomial at x = -1:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;- (0.194444444444444, 0.111111111111111)&lt;br /&gt;+ (-0.916666666666667, -0.666666666666667) &lt;br /&gt;- (0.583333333333333, 1.33333333333333) &lt;br /&gt;+ (0.694444444444444, 0.111111111111111)&lt;br /&gt;= (-1, -2)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Whereas the starting point of the NUBS version is just the first control point.&lt;br /&gt;&lt;br /&gt;Ack.  I could go on, but I fear I've exhausted the patience of the Perl readers out there.  And I feel like I'm constantly butting up against the limits of Rakudo with this project, so I think I'll put it aside for a few months and tackle something else.  Maybe try to whip up a grammar for &lt;a href="http://abcnotation.com/"&gt;ABC files&lt;/a&gt;, or something like that.  Then return to Vector when after Rakudo has had a chance to mature a bit more...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-5817579342823612071?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/5817579342823612071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/nubs-and-polynomials-with-graphic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5817579342823612071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/5817579342823612071'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/nubs-and-polynomials-with-graphic.html' title='NUBS and Polynomials, with graphic'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i49.tinypic.com/j64s28_th.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-1613063605826985139</id><published>2009-12-03T18:25:00.000-08:00</published><updated>2009-12-03T18:36:25.074-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ack'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><title type='text'>Ack in TextMate</title><content type='html'>For a while now I've known about &lt;a href="http://betterthangrep.com/"&gt;ack&lt;/a&gt;, the slick grep substitute written in Perl.  And I've known that the multi-file search function in TextMate was lousy, slow and memory-eating.&lt;br /&gt;&lt;br /&gt;What I didn't know was that there was an &lt;a href="http://github.com/protocool/ack-tmbundle"&gt;Ack bundle&lt;/a&gt; for TextMate.  It is a dream come true as far as I'm concerned.  Okay, I've only briefly played with it, but it's screamingly fast and produces good-looking results.  If there's a better add-on for TextMate, I don't know about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-1613063605826985139?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/1613063605826985139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/ack-in-textmate.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1613063605826985139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1613063605826985139'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/ack-in-textmate.html' title='Ack in TextMate'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-1210728749840761340</id><published>2009-12-02T05:51:00.000-08:00</published><updated>2009-12-02T06:01:06.330-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><title type='text'>Good Thing Perl is Dead</title><content type='html'>PerlPilot comments that the &lt;a href="http://perlpilot.blogspot.com/2009/12/annoying-meme.html"&gt;"Perl is dead" meme annoys him&lt;/a&gt;.  Personally, considering the apparent exponential growth in &lt;a href="http://d.hatena.ne.jp/gfx/20091202/1259719988"&gt;Perl-related Advent calendars this year&lt;/a&gt;, I think it's a good thing Perl is dead.  If this is dead, a living Perl community would probably overload the Internet with Advent calendar traffic...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-1210728749840761340?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/1210728749840761340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/good-thing-perl-is-dead.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1210728749840761340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1210728749840761340'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/12/good-thing-perl-is-dead.html' title='Good Thing Perl is Dead'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-1143241895383930866</id><published>2009-11-27T14:35:00.000-08:00</published><updated>2009-11-27T15:31:08.843-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Polynomial'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='NURBS'/><title type='text'>Wiktory!</title><content type='html'>Rakudo has been fixed, and the code I've been trying to get work for a month works beautifully now!  If I understand the fix properly, the problem was in Rat addition's call to &lt;code&gt;Rat.new&lt;/code&gt;. The code was very dumb, so it always tried set the denominator of the new Rat to the product of the denominators of the two numbers being added.  Rakudo's Ints are really Int32 right now (more or less), so if that product was equal to or greater than &lt;code&gt;2**31&lt;/code&gt;, it was autoconverted to Num.  But the &lt;code&gt;Rat.new&lt;/code&gt; which takes positional arguments takes Ints, so it wouldn't dispatch to that.  Instead it would try to dispatch to the default autogenerated named argument form of &lt;code&gt;Rat.new&lt;/code&gt;.  But that only takes the implicit &lt;code&gt;self&lt;/code&gt; parameter, and we were sending it &lt;code&gt;self, Int, Num&lt;/code&gt; -- thus the "too many positional arguments: 3 passed, 1 expected" error!&lt;br /&gt;&lt;br /&gt;Rakudo now autoconverts this case (&lt;code&gt;424/61731 +  832/61731&lt;/code&gt;) to Num to avoid the overflow in the denominator.  Obviously this is less than ideal -- a denominator of 61731 would work fine for this sum -- but it does work.  And how!  Gone are the mysterious crashes and errors.  With the number of samples cranked up, the curves look beautiful.&lt;br /&gt;&lt;br /&gt;Now I just need to do a bit of polishing to the output and figure out how to post it to the blog.  I'm definitely feeling I've accomplished something cool in Perl 6....&lt;br /&gt;&lt;br /&gt;PS Aha!  Preview graphic, I'll explain what it means next time.&lt;br /&gt;&lt;a href="http://tinypic.com" target="_blank"&gt;&lt;img src="http://i49.tinypic.com/j64s28.png" border="0" alt="NUBS curve and the three polynomials it is built from"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-1143241895383930866?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/1143241895383930866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/wiktory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1143241895383930866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1143241895383930866'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/wiktory.html' title='Wiktory!'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i49.tinypic.com/j64s28_th.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-7665691688385431654</id><published>2009-11-26T16:09:00.000-08:00</published><updated>2009-11-26T16:35:29.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rat'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='NURBS'/><title type='text'>Aha!</title><content type='html'>A post-Thanksgiving dinner $work debugging session left me with some spare time to poke at my SVG.pm bug: that is, the &lt;a href="http://lastofthecarelessmen.blogspot.com/2009/11/arrrgh.html"&gt;"too many positional arguments: 3 passed, 1 expected"&lt;/a&gt; error I got when I tried to crank up the number of samples I was taking of the curve.  I finally added enough says to track the error down to the simplest of operations: &lt;code&gt;@N[$i] += $temp;&lt;/code&gt;, where &lt;code&gt;$temp&lt;/code&gt; was &lt;code&gt;0.00686851014887172&lt;/code&gt;.  This wasn't one of my fancy overloaded operators, it was a basic Perl 6 numeric operator.  What could go wrong?&lt;br /&gt;&lt;br /&gt;Well, I added a bunch more stuff to the say.  And it turns out we are adding two Rats, 424/61731 and 832/61731.  What could go wrong?&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; say 424/61731 +  832/61731&lt;br /&gt;too many positional arguments: 3 passed, 1 expected&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you look into &lt;code&gt;infix:&lt;+&gt;(Rat, Rat)&lt;/code&gt;, it just does a naive fractional add, relying on &lt;code&gt;Rat.new&lt;/code&gt; to reduce the fraction.  The problem here is that means the denominator of our new fraction starts its life as &lt;code&gt;61731 * 61731&lt;/code&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; say (61731 * 61731) div 246924&lt;br /&gt;No applicable candidates found to dispatch to for 'infix:div'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I'm not sure what the best approach to fixing this is.  Obviously I can change my code to do Nums.  But I think the first step is to file a Rakudo bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-7665691688385431654?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/7665691688385431654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/aha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7665691688385431654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/7665691688385431654'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/aha.html' title='Aha!'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-1766025462232690926</id><published>2009-11-22T18:58:00.000-08:00</published><updated>2009-11-22T19:08:11.135-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Euler'/><title type='text'>Euler #4</title><content type='html'>draegtun had a nice post on &lt;a href="http://transfixedbutnotdead.com/2009/11/21/between-thought-and-expression/"&gt;Project Euler #4&lt;/a&gt;.  The goal is to find the largest palindromic product of two three digit numbers, and he lists solutions in Clojure and Python and a bunch in Perl 5.  There is also a Perl 6 version by trenton in &lt;a href="http://github.com/notbenh/euler_bench/blob/master/perl6/004/01.pl"&gt;euler_bench on github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I thought I'd try my hand at a more idiomatic Perl 6 version.  Here's my first attempt:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;100&lt;/span&gt;&lt;span style="color: DimGray;"&gt;..&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;999&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;X&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;(&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;100&lt;/span&gt;&lt;span style="color: DimGray;"&gt;..&lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;999&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;&lt;span style="color: Black;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;map&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;^&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;a&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;*&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;^&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;b&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;grep&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;(&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;eq&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;flip&lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;)&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;max&lt;/span&gt;.&lt;span style="color: black; font-weight: bold;"&gt;say&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Unfortunately, the usual caveats apply.  This blows up the current Rakudo, no doubt because without lazy lists it tries to construct a huge list entirely in memory and then collapses.  Rakudo ng has lazy lists, but it doesn't have grep or max yet.  So for now, this is purely a hypothetical implementation.&lt;br /&gt;&lt;br /&gt;However, with any luck, Rakudo ng will handle this by the end of the week...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-1766025462232690926?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/1766025462232690926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/euler-4.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1766025462232690926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/1766025462232690926'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/euler-4.html' title='Euler #4'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-4546695265330873711</id><published>2009-11-19T07:06:00.000-08:00</published><updated>2009-11-19T07:21:43.736-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><title type='text'>Rakudo ng has a good excuse</title><content type='html'>jnthn has an interesting post on &lt;a href="http://use.perl.org/%7EJonathanWorthington/journal/39917?from=rss"&gt;the progress and problems of Rakudo's ng branch&lt;/a&gt;.  Looking over some of the spectest files, it seems to me that ng has a good excuse for not handling many spectest files yet.  By my rough count, at least 50% of the spectest files have a "rakudo skip" directive in them, ie a test Rakduo cannot handle.  Because they have no equivalent "ng skip" directive set up, ng must handle every single case that Rakduo's master branch does to qualify it for inclusion in ng's spectest.  If Rakudo master similarly had no skip directive, more than half of the spectest would be eliminated!  So it's not surprising that ng is having growing pains on this front.&lt;br /&gt;&lt;br /&gt;Personally, I'm quite impressed by the progress on ng.  I cannot wait until I can use Perl 6's laziness -- that's a killer feature ng already has that Rakudo master lacks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/739580098595224395-4546695265330873711?l=lastofthecarelessmen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lastofthecarelessmen.blogspot.com/feeds/4546695265330873711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/rakudo-ng-has-good-excuse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4546695265330873711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/739580098595224395/posts/default/4546695265330873711'/><link rel='alternate' type='text/html' href='http://lastofthecarelessmen.blogspot.com/2009/11/rakudo-ng-has-good-excuse.html' title='Rakudo ng has a good excuse'/><author><name>SF</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-739580098595224395.post-6085470462672711434</id><published>2009-11-12T18:47:00.000-08:00</published><updated>2009-11-12T19:11:25.349-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Polynomial'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl 6'/><category scheme='http://www.blogger.com/atom/ns#' term='NURBS'/><category scheme='http://www.blogger.com/atom/ns#' term='Vector'/><title type='text'>Vector and SVG: Almost There</title><content type='html'>I noticed from #perl6 that chromatic fixed a memory leak in Parrot recently, and that fix made its way to Rakudo today.  I thought, hey, I've been having a bus error.  Could that be caused by an out-of-memory condition?  So I upgraded Rakudo, and haven't seen the bus error since.  (The "too many positional arguments: 3 passed, 1 expected" remain if I crank up the number of samples taken of each curve, but hopefully now I'll be able to track that down without being knocked around by bus errors.)&lt;br /&gt;&lt;br /&gt;So, the first thing I did to get SVG working with Nubs and Polynomial was to write a simple class which converts from "normal" XY space to SVG coordinates (which I'm referring to as NM coordinates in this code).&lt;br /&gt;&lt;pre&gt;&lt;span style="color DarkRed;"&gt;class&lt;/span&gt;&lt;span style="color DarkRed;"&gt; &lt;/span&gt;&lt;span style="color DarkRed;"&gt;Vector&lt;/span&gt;&lt;span style="color DarkRed;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;...&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;&lt;span style="color DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;subset&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Vector2&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;of&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;Vector&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;where&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;$&lt;/span&gt;&lt;span style="color: DarkGreen;"&gt;^&lt;/span&gt;&lt;span style="color: DarkBlue; font-weight: bold;"&gt;v&lt;/span&gt;&lt;span style="color: Black;"&gt;.&lt;/span&gt;&lt;span style="color: black; font-weight: bold;"&gt;Dim&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DimGray;"&gt;==&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: DarkOrange;"&gt;2&lt;/span&gt;&lt;span style="color: Black;"&gt; &lt;/span&gt;&lt;span style="color: Black;"&gt;}&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color DarkRed;"&gt;class&lt;/span&gt;&lt;span style="color DarkRed;"&gt; &lt;/span&gt;&lt;span style="color DarkRed;"&gt;SVGPad&lt;/span&gt;&lt;span style="color DarkRed;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: Black;"&gt;{&lt;/span&gt;&lt;span style="color: Black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: DarkGreen; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span style="color: DarkRed;"&gt;has&lt;/span&gt;&lt;span style="color: DarkRed;"&gt; &lt;/span&gt;&lt;span styl
