Re: Vectorizing operators for Hashes

2002-10-31 Thread Austin Hastings

--- Larry Wall <[EMAIL PROTECTED]> wrote:
> On Thu, 31 Oct 2002, Markus Laire wrote:

> The really great thing about the French quotes is that they visually
> keep the user aware of the composition.  «+=» is obviously a variety
> of
> +=, whereas ^+= is not obvious, though shorter.  (Square brackets are
> even better at that, but have other problems.)

I'm still unconvinced that square brackets won't work. 

But compared to Larry giving up «foo bar baz», «sont petits pommes de
terre»


__
Do you Yahoo!?
HotJobs - Search new jobs daily now
http://hotjobs.yahoo.com/



Re: Vectorizing operators for Hashes

2002-10-31 Thread Me
> temp sub infix:^[] is force_hash_to_intersect ;

Right. A property used as you suggest is effectively
an adverb applied at op definition rather than use.


> maybe somebody will wont  ( 1,2 ) ^[op] ( 1, 2, 3 ) to return array of
> length 3 ;

Right. It's quite plausible that one would want to be
able to control this at op use, rather than definition.

--
ralph




Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Me writes:
 > >  > > > union: 
 > >  > > > intersection :
 > >  > > 
 > >  > > %a ^is strict_keys;
 > >  > > %b ^is no_strict_keys;
 > > 
 > > in the resulting hash only ( and all ) keys of %a will be present. 
 > > because %b *admits* unknown keys but %a does not. 
 > 
 > Yes, but the general case is that one wants to be
 > able to control nuances of (hyper)operations, and
 > Larry introduced adverbs for precisely that reason.
 > 
 > Just because one can get away with controlling this
 > particular issue via noun adjectives (variable properties)
 > does not mean one should. (Although, conversely, just
 > because adverbs seem more more appropriate in this
 > case doesn't mean one shouldn't for some reason use
 > properties as you suggest.)
 > 

there is one mor epossibility : 

temp sub infix:^[] is force_hash_to_intersect ; 

( I'm compleatly not sure about that sintax )

sinse "vectorization" of any op is orthogonal concept to details of
that particular op , maybe we can controll behavior of that
vectorization  by ( ...? ) properties . 

we need it not only for hashes ; 
maybe somebody will wont  ( 1,2 ) ^[op] ( 1, 2, 3 ) to return array of 
length 3 ; 

arcadi 



Re: Vectorizing operators for Hashes

2002-10-31 Thread Me
> On Thu, 31 Oct 2002, Me wrote:
> : That's one reason why I suggested control of this sort
> : of thing should be a property of the operation, not of
> : the operands.
> 
> I think that by and large, the operator knows whether it wants to
> do union or intersection.  When you're doing +, it's obviously
> union that you want, with undef defaulting to 0.  And // would
> want intersection.

Ok. So I accidentally got something right! ;> ("control of this sort of
thing should be a property of the operation, not of the operands.")

There are clearly some operations where adverbs make sense.
Presumably one of the classes of op for which adverbs might
make sense is hyperop.

Assuming so, did my suggestion of ^adverb make sense to you
as a way to distinguish op and hyperop adverbs?

--
ralph



Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Larry Wall writes:
 > On Thu, 31 Oct 2002, Me wrote:
 > : That's one reason why I suggested control of this sort
 > : of thing should be a property of the operation, not of
 > : the operands.
 > 
 > I think that by and large, the operator knows whether it wants to
 > do union or intersection.  When you're doing «+», it's obviously
 > union that you want, with undef defaulting to 0.  And «//» would
 > want intersection.
 > 
 > Larry
 > 
 > 
 > 

so is really going to the direction that many "official" operators
will be "wysiwig" Unicode staff like  «+» , and then for some slice of the
comunity there will be ( TeX - like ?? ) ascii shortcuts , because we
need them ( what was the length of the tread to figure out how to
write and read them ) . So perl take placeholders from Mathematica ,
vector operations from Matlab , and greek and all other funny
characters from TeX : 

use TeX;
@\gamma = @\alpha  \hyper[\sum] @\beta ;

arcadi .



Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Me writes:
 > > > union: 
 > > > intersection :
 > > 
 > > How would this work for hashes with differing properties?
 > > 
 > > %a ^is strict_keys;
 > > %b ^is no_strict_keys;
 > > 
 > > What would happen?
 > 

in the resulting hash only ( and all ) keys of %a will be present. 
because %b *admits* unknown keys but %a does not. 

although I admit that property names can be much better .  


 > That's one reason why I suggested control of this sort
 > of thing should be a property of the operation, not of
 > the operands.
 > 
 > --
 > ralph
 > 
 > 

arcadi .



Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Austin Hastings writes:
 > > but I am not shure ... 
 > 
 > "sure"
 > 

thanks . sorry that I write so badly . I'll try to be better . 

 > (Unless you do this on purpose :-)
 > 
 > Cheers,
 > 
 > =Austin
 > 
 > __
 > Do you Yahoo!?
 > HotJobs - Search new jobs daily now
 > http://hotjobs.yahoo.com/
 > 
 > 



Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Austin Hastings writes:
 > 
 > --- [EMAIL PROTECTED] wrote:
 > > I agree. But I think that we can get away here with just hash
 > > properties , just like hash behaviour in  is controlled by
 > > properties . 
 > > 
 > > e.g. 
 > > union: 
 > > 
 > > (%a,%b) ^is no_strict_keys ;
 > > (%a %b) ^is default_value ( 0 ) ;
 > > %a ^[+] %b 
 > > 
 > > intersection :
 > > 
 > > (%a,%b) ^is strict_keys ;
 > > %a ^[+] %b 
 > > 
 > > 
 > > this maybe longer but clear : one line - one concept . 
 > 
 > Arcadi,
 > 
 > How would this work for hashes with differing properties?
 > 
 > E.g.,
 > 
 > %a = ("apple" => 1, "abacus" => 2);
 > %b = ("banana" => 3, "abacus" => 2);
 > 
 > %a ^is strict_keys;
 > %b ^is no_strict_keys;
 > 
 > %c = %a ^[+] %b;
 > 
 > What would happen?

in the result hash there will be only keys of %a, because 
%b *can admit unknown keys*, but %a - cannot 

 > 
 > %a rules?: %c == ("abacus" => 4)
 > %b rules?: %c == ("apple" => 1, "abacus" => 4, "banana" => 3)
 > strict_keys filters result?: %c == ("apple" => 1, "abacus" => 4)
 > 
 > =Austin
 > 



arcadi 



Re: Vectorizing operators for Hashes

2002-10-31 Thread Larry Wall
On Thu, 31 Oct 2002, Markus Laire wrote:
: I don't think there should be any upper limit for operator-lengths.

There will never be any official limits.  Perl is not about arbitrary
limits.  But I will tell you that I only added <=> to Perl 5 because
I knew there would never be a <=>= operator.  We'll have to relax that
a bit for Perl 6, but we're still trying vaguely to avoid the Icon trap.
Only compositions of operators will be allowed to get longer than 3 chars.
And we try to keep the basic operators at 2 or less.

The really great thing about the French quotes is that they visually
keep the user aware of the composition.  «+=» is obviously a variety of
+=, whereas ^+= is not obvious, though shorter.  (Square brackets are
even better at that, but have other problems.)

Larry




Re: Vectorizing operators for Hashes

2002-10-31 Thread Larry Wall
On Thu, 31 Oct 2002, Me wrote:
: That's one reason why I suggested control of this sort
: of thing should be a property of the operation, not of
: the operands.

I think that by and large, the operator knows whether it wants to
do union or intersection.  When you're doing «+», it's obviously
union that you want, with undef defaulting to 0.  And «//» would
want intersection.

Larry




Re: Vectorizing operators for Hashes

2002-10-31 Thread Me
> > union: 
> > intersection :
> 
> How would this work for hashes with differing properties?
> 
> %a ^is strict_keys;
> %b ^is no_strict_keys;
> 
> What would happen?

That's one reason why I suggested control of this sort
of thing should be a property of the operation, not of
the operands.

--
ralph



Re: Vectorizing operators for Hashes

2002-10-31 Thread Austin Hastings

--- [EMAIL PROTECTED] wrote:
> I agree. But I think that we can get away here with just hash
> properties , just like hash behaviour in  is controlled by
> properties . 
> 
> e.g. 
> union: 
> 
> (%a,%b) ^is no_strict_keys ;
> (%a %b) ^is default_value ( 0 ) ;
> %a ^[+] %b 
> 
> intersection :
> 
> (%a,%b) ^is strict_keys ;
> %a ^[+] %b 
> 
> 
> this maybe longer but clear : one line - one concept . 

Arcadi,

How would this work for hashes with differing properties?

E.g.,

%a = ("apple" => 1, "abacus" => 2);
%b = ("banana" => 3, "abacus" => 2);

%a ^is strict_keys;
%b ^is no_strict_keys;

%c = %a ^[+] %b;

What would happen?

%a rules?: %c == ("abacus" => 4)
%b rules?: %c == ("apple" => 1, "abacus" => 4, "banana" => 3)
strict_keys filters result?: %c == ("apple" => 1, "abacus" => 4)

=Austin



__
Do you Yahoo!?
HotJobs - Search new jobs daily now
http://hotjobs.yahoo.com/



Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Me writes:
 > > > %a ^:union[op] %b
 > > >
 > > > %a :foo[op]:bar %b
 > > 
 > > I think that any operators over 10 characters should
 > > be banished, and replaced with functions.
 > 
I agree. But I think that we can get away here with just hash
properties , just like hash behaviour in  is controlled by
properties . 

e.g. 
union: 

(%a,%b) ^is no_strict_keys ;
(%a %b) ^is default_value ( 0 ) ;
%a ^[+] %b 

intersection :

(%a,%b) ^is strict_keys ;
%a ^[+] %b 


this maybe longer but clear : one line - one concept . 

but I am not shure ... 

arcadi . 



Re: Vectorizing operators for Hashes

2002-10-31 Thread fearcadi
Uri Guttman writes:

 > 
 >  %hash1.values [+]= %hash2{%hash1.keys} ;
 > 
but here is exactly example analogous to 

my Dog $x = new Dog . 

which was discusse dand turned  to

my Dog $x .= new ; 
 
It's (almost) clear what you want when you write 

%hash1 [+]= %hash2 ; 

so why to screen the meaning with several ( almost ) unnecessary 
words . 

And besides, If that will be usefull there will be somebody who will 
make those shortcuts. 

aracdi . 




Re: Vectorizing operators for Hashes

2002-10-31 Thread Markus Laire
On 31 Oct 2002 at 0:40, John Williams wrote:

> On Wed, 30 Oct 2002, Me wrote:
>
> > %a ^:union[op] %b
> >
> > %a :foo[op]:bar %b
>
> I think that any operators over 10 characters should be banished, and
> replaced with functions.

I don't think there should be any upper limit for operator-lengths.

e.g. When teaching perl to my little brothers (still at primary
school) I might want to use alphabetical userdefined operators:

print 1 + 5 - 4 / 2
print one plus five minus four divided_by two
(and same in finnish)
näytä yksi plus viisi miinus neljä jaettuna kaksi

At least it wouldn't harm anyone to allow this.

--
Markus Laire 'malaire' <[EMAIL PROTECTED]>





Re: Vectorizing operators for Hashes

2002-10-31 Thread Me
> > %a ^:union[op] %b
> >
> > %a :foo[op]:bar %b
> 
> I think that any operators over 10 characters should
> be banished, and replaced with functions.

I'd agree with that. In fact probably anything over 4,
and even 4 is seriously pushing it.

I'll clarify that I am talking here about using adverbs.

>From A3 (about the colon):

Hence, this operator modifies a preceding operator
adverbially. ... It can be used to supply a ``step'' to a
range operator, for instance.

I would expect the length of these adverbs to fall in a
range somewhat the same as properties. So a word
like 'union' is reasonable, and even 'intersection' too.

Ignoring hyperoperators, one might use an adverb thus:

$a / $b : dbz_Inf

to have a divide by zero be treated as Infinity.

I can see scope for a bunch of adverbs that control how
a particular hyperoperation works. Thus, perhaps:

@a ^[/] @b : short

to stop iteration when the shortest of two arrays is used up.

But this assumes that the adverb applies to the ^[]
hyperop, not the / op.

Perhaps this is resolved thus:

@a ^[/ : dbz_Inf] @b : short

But I also suspect it would be good to be able to
associate distinct adverbs with the lhs and rhs of
a binary operation.

So I thought perhaps one could go down the path of 

@a ^ :step(2) [/ : dbz_Inf] :step(3) @b : short

Hmm. Perhaps hyperop adverbs are preceded with
a ^ and one gets instead:

@a ^[/] @b : dbz_Inf, ^short, ^step(2,3)

--
ralph



Re: Vectorizing operators for Hashes

2002-10-30 Thread John Williams
On Wed, 30 Oct 2002, Me wrote:

> %a ^:union[op] %b
>
> %a :foo[op]:bar %b

I think that any operators over 10 characters should be banished, and
replaced with functions.

~ John Williams




Re: Vectorizing operators for Hashes

2002-10-30 Thread Uri Guttman
> "fc" ==   <[EMAIL PROTECTED]> writes:

  fc> So is it usefull to make sence out of these : 

  fc> hash ^[op] hash 
  fc> hash ^[op] array 
  fc> hash ^[op] scalar 

  fc> array ^[op] array
  fc> array ^[op] scalar

well, you can't mung the keys to a hash, just the values. so why not
just use the values method as an [lr]value? this works already in perl5.

%hash.values [+]= 10 ;

%hash1.values [+]= %hash2.values ;

now that may fail as the order of the values would be different so use a
slice:

%hash1.values [+]= %hash2{%hash1.keys} ;

uri

-- 
Uri Guttman  --  [EMAIL PROTECTED]   http://www.stemsystems.com
- Stem and Perl Development, Systems Architecture, Design and Coding 
Search or Offer Perl Jobs    http://jobs.perl.org



Re: Vectorizing operators for Hashes

2002-10-30 Thread Me
> hash ^[op] hash
> ...
> array ^[op] scalar

ie, generally:

term ^[op] term


> what to do if @a, @b in @a ^[op] @b have different length 
> what to do if %a, %b in %a ^[op] %b have not the same set of keys 
> what to do  in %a ^[op] @a 
> 
> [what to do] resolved by hash property : 

I'd expect adverbs rather than adjectives for these sorts
of issues, ie ':' modifiers of vectorization rather than use
of variable/value properties.


> @a ???[op]  @b = [ array of   @a[x] op @a[y]   for all pairs x,y ] 
> 
> this path have no end, but where to stop ?? 

b4p6>J! ;> (http://jsoftware.com/)

Seriously, I also think it's worth seeing where this goes.

As noted above, I'd expect use of adverbs to allow
modification of hyperactivity:

%a ^[op] %b : union

Of course, this suffers the obtw problem. An alternative
might be:

%a ^:union[op] %b

I can definitely see scope for wanting separate adverbs
to influence how vectorization works on the lhs and rhs.
Perhaps

%a :foo[op]:bar %b

where I'm assuming :[op] instead of ^[op] as the base
syntax for vectorization.

--
ralph



Re: Vectorizing operators for Hashes

2002-10-30 Thread fearcadi


So is it usefull to make sence out of these : 

hash ^[op] hash 
hash ^[op] array 
hash ^[op] scalar 

array ^[op] array
array ^[op] scalar

Actually , 
I just want to understand , why so much accent is put on vectorizing 
atomic operations with arrays . It seems that hashes are at least as 
frequent . And automating operations on them may be just as usefull. 

( my feeling is that the reason is not the same as in Matlab and such
.. Because it begin to look like Matlab . 
)

with arrays we have to resolve the question :

what to do if @a, @b in @a ^[op] @b have different length 


with hashes we will have this question 

what to do if %a, %b in %a ^[op] %b have not the same set of keys 

we can resolve it with properties on hashes. 

%a is vector_intersect 
%a is vector_unify

Now we have also this question : 

what to do  in %a ^[op] @a 

this again can be resolved by hash property : 

%a is vector_maptoindex { return int rand }

I am not shure we need all this ( and in this form ) , but if
vectorizing array operations make operators so heavy , we have to
probably take a ride on it.  I dont know. Or probably to go on that
path we should introduce tenzor operators . There was a discussion
about Sets .

how about having 

@a ???[op]  @b = [ array of   @a[x] op @a[y]   for all pairs x,y ] 


this path have no end, but where to stop ?? 


arcadi. 





Re: Vectorizing operators for Hashes

2002-10-30 Thread fearcadi

!! Sorry, in previos post I had a mistake


Proposal : Vector operations for Hashes 

(

this is just a joke 
%a ^{+} %b 

)

the direct generalization would be as follows : 

@a ^[op] @b 

for @a ; @b -> 
$x ; $y { 
 $x op $y 
}



%a ^[op] %b 

# find common keys
@k = keys hash{ map { { _=>1 } } *( %a.keys , %b.keys ) }; 
  
#return hash 
hash {
for @k -> $x { 
{ $x => %a{$x} op %b{$x} } 
}   
 }

so in words , find common keys and then vectorize op as if 
hash keys are array indexes. 

Probably that behaviour may be tuned or conrolled by properties of
hashes just like what happens inside  . 


maybe this could be made more general , since 
Larry noted  that junctions ( 1 | 2 | 3 ) are similar to hashes  

> %hash = ( 1 | 2 | 3 ) ; 

dont have any Idea how. 

arcadi. 





Re: Vectorizing operators for Hashes

2002-10-30 Thread Larry Wall
On Wed, 30 Oct 2002 [EMAIL PROTECTED] wrote:
: # find common keys
: @k = keys hash{ map { { _=>1 } } *( %a.keys , %b.keys ) }; 

It seems a bit odd to privilege the intersection over the union.

Larry




Re: Vectorizing operators for Hashes

2002-10-30 Thread fearcadi

Proposal : Vector operations for Hashes 

%a ^{+} %b 

the direct generalization would be as follows : 

@a ^[op] @b 

for @a ; @b -> 
$x ; $y { 
 $x op $y 
}



%a op %b 

# find common keys
@k = keys hash{ map { { _=>1 } } *( %a.keys , %b.keys ) }; 
  
#return hash 
hash {
for @k -> $x { 
{ $x => %a{$x} op %b{$x} } 
}   
 }

so in words , find coomon keys and then vectorize op as if 
hash keys are array indexes. 

Probably that behaviour may be tuned or conrolled by properties of
hashes just like what happens inside  . 

maybe this could be made more general , since 
Larry noted  that junctions ( 1 | 2 | 3 ) are similar to hashes  

> %hash = ( 1 | 2 | 3 ) ; 

dont have any Idea how. 

arcadi.