Re: Introspection and list question
On Wed, Dec 13, 2006 at 10:55:28AM +0200, Gaal Yahas wrote: : L stipulates the : results of a gather are flattened to a lazy list. I'm not sure how far : that flattenning goes, but one of these should do the trick, I think It would only flatten a recursive structure with the help of something that recurses. The flattening of gather/take itself is only one level, insofar as the various takes are treated as "pushes" onto the list being gathered. : (Pugs does not yet implement gather/take): Actually, it does, but only the block form. The generalization to any statement (using C syntax) was a very recent change. The following prints (1, 2, 3, 4, 5) in current pugs: #!/usr/bin/pugs my $a = [1,2,[3,4],5]; multi flattener ($x) { take $x; } multi flattener (Array @array) { for @array -> $elem { flattener($elem); } } sub flatten ([EMAIL PROTECTED]) { for @args -> $arg { return gather { flattener($arg) } } } $a.flatten.perl.say; Larry
Re: Introspection and list question
On Tue, Dec 12, 2006 at 02:19:46PM -0800, Ovid wrote: > First, how do I do introspection in Pugs? CPAN's Perl6::Bible hasn't > been updated in a while, but the various ways to get a list of methods > (from > http://search.cpan.org/dist/Perl6-Bible/lib/Perl6/Bible/S12.pod#Introspection > or http://tinyurl.com/yxukar) don't appear to work. They all throw > syntax errors or "No compatible subroutine" errors. In general you're better off looking at http://spec.pugscode.org/ for more updated synopses, but in regard to introspection, the APIs aren't well specced yet. > Also, I'm having trouble with problem 7 in > http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html > or http://tinyurl.com/tt9e7. Basically, it's flattening nested lists > and I'm embarrassed to admit that I can't figure this out in Perl6. > Thoughts? I've been reading synopses and grepping through Pugs, but to > no avail. L stipulates the results of a gather are flattened to a lazy list. I'm not sure how far that flattenning goes, but one of these should do the trick, I think (Pugs does not yet implement gather/take): sub flatten1 (@list) { gather for @list { take $_; } } sub flatten2 (@list) { gather for @list { take $_.does("List") ?? flatten2 $_ !! $_; } } -- Gaal Yahas <[EMAIL PROTECTED]> http://gaal.livejournal.com/
Re: Introspection and list question
On 12/12/06, Ovid <[EMAIL PROTECTED]> wrote: Hi all, A couple of quick things. First, how do I do introspection in Pugs? CPAN's Perl6::Bible hasn't been updated in a while, but the various ways to get a list of methods (from http://search.cpan.org/dist/Perl6-Bible/lib/Perl6/Bible/S12.pod#Introspection or http://tinyurl.com/yxukar) don't appear to work. They all throw syntax errors or "No compatible subroutine" errors. it seems much of this is unimplemented. from the pugs test dir, C returns some tests, but most of them are decorated with C<< :todo >>. Also, I'm having trouble with problem 7 in http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html or http://tinyurl.com/tt9e7. Basically, it's flattening nested lists and I'm embarrassed to admit that I can't figure this out in Perl6. Thoughts? I've been reading synopses and grepping through Pugs, but to no avail. * in index position flattens an array. it's mentioned in S02 (http://dev.perl.org/perl6/doc/design/syn/S02.html), among other places. a quick test at http://run.pugscode.org/ suggests that it works, too: pugs> my @a=[1,2,[3,4],5]; say @a[*]; 1 2 3 4 5 ~jerry