Re: Introspection and list question

2006-12-13 Thread Larry Wall
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

2006-12-13 Thread Gaal Yahas
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

2006-12-12 Thread jerry gay

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