Re: aliasing - was:[nice2haveit]

2001-07-19 Thread Me

> Sounds like what we really want is a form of "for" which can iterate
> over a list of hashes or arrays:
> 
> for my @a ( @foo, @bar ) { ...
> 
> for my %h ( %foo, %bar ) { ...

Yes.

Isn't the underlying issue in the above how perl6 handles manipulation
and aliasing of multi-dimensional arrays into derived sub-structures?

In other words, isn't there a more general problem of how to provide
MD access and what to do with the currently one dimensional operations
like:

for (@foo) {

when @foo is multi-dimensional?

Jeremy Howard wrote RFCs that I think relate to this and pointed
me to J (APL cleaned up) as a powerful source of related ideas.
I think the specific issue above relates to a combination of
merge/unmerge and other proposed features.




Re: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Stuart Rocks

> Why would you want it to print Monkey Hero, I would expect $_ to be
> localized, rather than global, which could prove more convenient.

No, it's still localized.

But the With would mean that $_ in a way becomes a normal variable like $foo
was, and the $foo is now the 'default variable'.





RE: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Sterin, Ilya

@foo = ("foo1", "foo2");
@bar = ("bar1", "bar2");

 for ( \@foo, \@bar ) { 
print "$_->[0] : $_->[1]\n"; 
  } 

will output

foo1 : foo2
bar1 : bar2

I was thinking more of iterating through them at the same time, which would
sort of like compare them.  I believe this was the initial topic of this
thread (I believe, that was about two days ago, my mind might be going blank
though).

So my initial code (which I modified a little...)

for ( @foo, @bar ) {
  print "$_[0] : $_[1]\n";
}

for would set each element of the @_ array to correspond to the arguments in
for() , therfore $_[0] will equal to the current element of @foo and $_[1]
will equal to the corresponding element of @bar.  As I mentioned before this
can very easily be accomplished through 0..$#foo loop, but people disagreed
based on that it would be a nice option, in my opinion it's useless, but if
was implemented this could be a way:)

Ilya


-Original Message-
From: 'John Porter '
To: [EMAIL PROTECTED]
Sent: 07/19/2001 1:46 PM
Subject: Re: what's with 'with'?  (was: [aliasing - was:[nice2haveit]])

Sterin, Ilya wrote:
> Well then maybe $_ can be a reference to a multidimensional array or
hash,
> and temp vars can be access like this.
> 
> for ( @foo, @bar ) {
>   print "$_->[0] : $_->[1]\n";
> }

That's bizarre and unnecessary.  We can already do this:

  for ( \@foo, \@bar ) {
print "$_->[0] : $_->[1]\n";
  }

-- 
John Porter



Re: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread 'John Porter '

Sterin, Ilya wrote:
> Well then maybe $_ can be a reference to a multidimensional array or hash,
> and temp vars can be access like this.
> 
> for ( @foo, @bar ) {
>   print "$_->[0] : $_->[1]\n";
> }

That's bizarre and unnecessary.  We can already do this:

  for ( \@foo, \@bar ) {
print "$_->[0] : $_->[1]\n";
  }

-- 
John Porter




RE: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Sterin, Ilya

Why would you want it to print Monkey Hero, I would expect $_ to be
localized, rather than global, which could prove more convenient.

Ilya

-Original Message-
From: Stuart Rocks
To: [EMAIL PROTECTED]
Sent: 07/19/2001 1:13 PM
Subject: Re: what's with 'with'?  (was: [aliasing - was:[nice2haveit]])

> But can someone reiterate the
> difference between the above and
>
> for($foo){
>print "I am not a $foo\n";
>   # or:
>print "I am not a ";
>print;
> }

Try this under the current for system, cause it's unclear what will
happen
for those new to Perl:

  $foo="monkey";  $_=" coward";
  for($foo){
print;
$_ = " hero";
  }
  print;

What is printed is "monkey coward", rather than "monkey hero". In
addition,
$foo is now " hero".

I suppose there isn't a huge difference. Either way, all this talk has
probably taken longer than it would take to write the thing.




Re: aliasing - was:[nice2haveit]

2001-07-19 Thread John Porter

Bart Lateur wrote:
> So, in this case, a "with" synonym for "for" would work.
> 
> But this only works for scalars. You can't have a %foo alias to
> %Some::Other::hash this way, or a @bar alias to @Some::Other::array.

Sounds like what we really want is a form of "for" which can iterate
over a list of hashes or arrays:

for my @a ( @foo, @bar ) { ...

for my %h ( %foo, %bar ) { ...

-- 
John Porter



Re: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Stuart Rocks

> But can someone reiterate the
> difference between the above and
>
> for($foo){
>print "I am not a $foo\n";
>   # or:
>print "I am not a ";
>print;
> }

Try this under the current for system, cause it's unclear what will happen
for those new to Perl:

  $foo="monkey";  $_=" coward";
  for($foo){
print;
$_ = " hero";
  }
  print;

What is printed is "monkey coward", rather than "monkey hero". In addition,
$foo is now " hero".

I suppose there isn't a huge difference. Either way, all this talk has
probably taken longer than it would take to write the thing.





RE: aliasing - was:[nice2haveit]

2001-07-19 Thread Sterin, Ilya

Agree.  I think that with() should only be used with object references only,
and $_ should be set accordingly.

Ilya 

-Original Message-
From: John Porter
To: [EMAIL PROTECTED]
Sent: 07/19/2001 1:01 PM
Subject: Re: aliasing - was:[nice2haveit]

Sterin, Ilya wrote:
> But I thought this was related to more than just with(), so if we have
> 
> ### Would now have to be printed as
> 
> print "This is number ";
> print;
> print " of 10\n";
> 
> I still believe that although not defining a variable source will use
the
> temp variable there is still a need for an explicit scalar like $_.
> Unless there is something I am missing from this discussion.

No.  with() must be consistent with other perl constructs.
If implemented, it will use $_.  Plain and simple.

-- 
John Porter



RE: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Sterin, Ilya

Well then maybe $_ can be a reference to a multidimensional array or hash,
and temp vars can be access like this.

for ( @foo, @bar ) {
print "$_->[0] : $_->[1]\n";
}

As for hashes it might hold the key, also in an multidimensional array.

Ilya

-Original Message-
From: John Porter
To: [EMAIL PROTECTED]
Sent: 07/19/2001 12:59 PM
Subject: Re: what's with 'with'?  (was: [aliasing - was:[nice2haveit]])

I believe what is really wanted is for "for" to be able to iterate
over lists of arrays or hashes:

for my @i ( @foo, @bar ) { ...

for my %i ( %foo, %bar ) { ...

with real aliasing occuring.

If @_ and %_ are the default iterator variables, then imagine:

for ( @argset1, @argset2 ) {
&quux;

But I'm not convinced of the utility of this over using
scalar references.

-- 
John Porter



Re: aliasing - was:[nice2haveit]

2001-07-19 Thread John Porter

Sterin, Ilya wrote:
> But I thought this was related to more than just with(), so if we have
> 
> ### Would now have to be printed as
> 
> print "This is number ";
> print;
> print " of 10\n";
> 
> I still believe that although not defining a variable source will use the
> temp variable there is still a need for an explicit scalar like $_.
> Unless there is something I am missing from this discussion.

No.  with() must be consistent with other perl constructs.
If implemented, it will use $_.  Plain and simple.

-- 
John Porter




Re: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Stuart Rocks

> Like "I am not a
> coward" which can be easily done with print "I am not a $_"; will now have
> to be written in two separate lines, and possibly more if there is more to
> follow.
>
> Ilya

Um, of course the original way is still possible!





Re: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread John Porter

I believe what is really wanted is for "for" to be able to iterate
over lists of arrays or hashes:

for my @i ( @foo, @bar ) { ...

for my %i ( %foo, %bar ) { ...

with real aliasing occuring.

If @_ and %_ are the default iterator variables, then imagine:

for ( @argset1, @argset2 ) {
&quux;

But I'm not convinced of the utility of this over using
scalar references.

-- 
John Porter




RE: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Sterin, Ilya

I question this too, since as you mentioned with, in my experience works
nicely to reference and object like
with(object)
{
.foo();
.bar();

}

Ilya

-Original Message-
From: Mark Koopman
To: [EMAIL PROTECTED]
Sent: 07/19/2001 12:42 PM
Subject: Re: what's with 'with'?  (was: [aliasing - was:[nice2haveit]])



Garrett Goebel wrote:

> From: Stuart Rocks [mailto:[EMAIL PROTECTED]]
> 
>>Both the following would work:
>>
>>with($foo){
>>   print "I am not a $foo\n";
>>  # or:
>>   print "I am not a ";
>>   print;
>>}
>>
> 
> Okay... I've been mostly ignoring this thread. But can someone
reiterate the
> difference between the above and
> 
> for($foo){
>print "I am not a $foo\n";
>   # or:
>print "I am not a ";
>print;
> }
> 
> ???
> 
> 


pure syntax.  does anyone else question making aliases like 'with' from
'for'?
a 'with' alias could open the door on purely confusing code like this:

with( my $i; $i < 10; $i++ ){  ... }

instead of having an standard 'with' that only works on objects like
this:

with( MyObject->new() ) {
  .setIt("blah");
  ...
}





-- 
   -mark koopman

  WebSideStory  10182  Telesis Court
  San Diego CA  92121  858-546-1182 ext 318



RE: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Sterin, Ilya

Well if you look at the proposed...

$_ = "monkey "; 
 $foo = "coward"; 
 with ($foo){ 
 print; 
 print "$_"; 
}

Would print "coward monkey", which will give you unexpected results if you
are used to having the same output for both, "coward coward".
But I guess the above would not replace $_ which would be very inconvenient
if you had to output it with a whole bunch of other stuff.  Like "I am not a
coward" which can be easily done with print "I am not a $_"; will now have
to be written in two separate lines, and possibly more if there is more to
follow.

Ilya

-Original Message-
From: Garrett Goebel
To: 'Stuart Rocks'; [EMAIL PROTECTED]
Sent: 07/19/2001 12:34 PM
Subject: what's with 'with'?  (was: [aliasing - was:[nice2haveit]])

From: Stuart Rocks [mailto:[EMAIL PROTECTED]]
> 
> Both the following would work:
> 
> with($foo){
>print "I am not a $foo\n";
>   # or:
>print "I am not a ";
>print;
> }

Okay... I've been mostly ignoring this thread. But can someone reiterate
the
difference between the above and

for($foo){
   print "I am not a $foo\n";
  # or:
   print "I am not a ";
   print;
}

???



RE: aliasing - was:[nice2haveit]

2001-07-19 Thread Sterin, Ilya

But I thought this was related to more than just with(), so if we have

foreach (1..10)
{
print;  

### But if you are trying to use it in a string

print "This is number $_ of 10\n";

### Would now have to be printed as

print "This is number ";
print;
print " of 10\n";

### Which is three extra statement.  

}

I still believe that although not defining a variable source will use the
temp variable there is still a need for an explicit scalar like $_.
Unless there is something I am missing from this discussion.

Ilya

-Original Message-
From: Stuart Rocks
To: [EMAIL PROTECTED]
Sent: 07/19/2001 11:31 AM
Subject: Re: aliasing - was:[nice2haveit]

> >Then how would you write "I am not a coward"
>
> with ($foo)
> {
>   print "I am not a";  ##What do I use here or do I have to issue a
>##separate print like...
>   print;
> }
>
> Ilya

Well in Perl5, for the print to use default value it's just 'print;'.
The
same applies for alot (all?) of Perl5 functions. The default value is
always
(as far as I know) $_ or @_ depending on the context.

Both the following would work:

with($foo){
   print "I am not a $foo\n";
  # or:
   print "I am not a ";
   print;
}

The idea for this style of C, came because I don't see why the
default
has to always be $_. Often the amount of code required would be able to
be
dramatically reduced if 'default value'  was userdefinable for blocks
with
the With command.


(All opinions in this post are not representative of Monkey Coward)




Re: what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Mark Koopman



Garrett Goebel wrote:

> From: Stuart Rocks [mailto:[EMAIL PROTECTED]]
> 
>>Both the following would work:
>>
>>with($foo){
>>   print "I am not a $foo\n";
>>  # or:
>>   print "I am not a ";
>>   print;
>>}
>>
> 
> Okay... I've been mostly ignoring this thread. But can someone reiterate the
> difference between the above and
> 
> for($foo){
>print "I am not a $foo\n";
>   # or:
>print "I am not a ";
>print;
> }
> 
> ???
> 
> 


pure syntax.  does anyone else question making aliases like 'with' from 'for'?
a 'with' alias could open the door on purely confusing code like this:

with( my $i; $i < 10; $i++ ){  ... }

instead of having an standard 'with' that only works on objects like this:

with( MyObject->new() ) {
  .setIt("blah");
  ...
}





-- 
   -mark koopman

  WebSideStory  10182  Telesis Court
  San Diego CA  92121  858-546-1182 ext 318




what's with 'with'? (was: [aliasing - was:[nice2haveit]])

2001-07-19 Thread Garrett Goebel

From: Stuart Rocks [mailto:[EMAIL PROTECTED]]
> 
> Both the following would work:
> 
> with($foo){
>print "I am not a $foo\n";
>   # or:
>print "I am not a ";
>print;
> }

Okay... I've been mostly ignoring this thread. But can someone reiterate the
difference between the above and

for($foo){
   print "I am not a $foo\n";
  # or:
   print "I am not a ";
   print;
}

???



Re: aliasing - was:[nice2haveit]

2001-07-19 Thread Stuart Rocks

> >Then how would you write "I am not a coward"
>
> with ($foo)
> {
>   print "I am not a";  ##What do I use here or do I have to issue a
>##separate print like...
>   print;
> }
>
> Ilya

Well in Perl5, for the print to use default value it's just 'print;'. The
same applies for alot (all?) of Perl5 functions. The default value is always
(as far as I know) $_ or @_ depending on the context.

Both the following would work:

with($foo){
   print "I am not a $foo\n";
  # or:
   print "I am not a ";
   print;
}

The idea for this style of C, came because I don't see why the default
has to always be $_. Often the amount of code required would be able to be
dramatically reduced if 'default value'  was userdefinable for blocks with
the With command.


(All opinions in this post are not representative of Monkey Coward)





RE: aliasing - was:[nice2haveit]

2001-07-19 Thread Sterin, Ilya

Stuart Rocks wrote:
>> 
>>  C would also make the [variable, alias, whatever]
>> default, but not replace the $_:
>> 
>> $_ = "monkey ";
>> $foo = "coward";
>> with ($foo){
>> print;
>> print "$_";
>> }
>> 
>> would output "monkey coward". 

>okay, "coward" is default but $_ has not been replaced, so would not 
>the code example print "coward monkey"

>Then how would you write "I am not a coward"

with ($foo)
{
  print "I am not a";  ##What do I use here or do I have to issue a 
   ##separate print like...
  print;
}

Ilya