in reply to Yet Another Rosetta Code Problem (Perl, Ruby, Python, Haskell, ...)
It is hard to imagine why this specific problem would have its own solution.
The problem can be generalized into something worth solving. Assume we want to divide a list on break points. I will present an iterator solution.
This leaves a lot to be desired but the idea jumped into my head and so I thought I would share.#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub gen_divider { my %opt = @_; my $is_break = $opt{detect_break}; my ($curr, @list); return sub { for (@_) { if (! defined $curr || $is_break->($_, $curr)) { push @list, [$_]; $curr = $_; } else { push @{$list[-1]}, $_; } } return \@list; }; } my $break_point = sub { my ($item_to_test, $prev_break_point) = @_; return $item_to_test ne $prev_break_point; }; my $divide = gen_divider(detect_break => $break_point); for (split //, "ZBBBCZZ") { $divide->($_); } my $list = $divide->(); print Dumper($list);
Cheers - L~R
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Yet Another Rosetta Code Problem (Perl, Ruby, Python, Haskell, ...)
by Anonymous Monk on Sep 11, 2007 at 00:54 UTC | |
by eyepopslikeamosquito (Archbishop) on Sep 11, 2007 at 22:19 UTC | |
|