Re: could u help me please?

2003-09-26 Thread Paul Johnson
On Thu, Sep 25, 2003 at 09:16:43AM -0700, Shannon Francis wrote:

 i tried to build a program and have only one error but seem not to be
 able to fix it. i think it is a rather small one. i would really
 appreciate it if you help me with this situation:
  
  if (num1 %2 =0)
 the error is: error C2106: '=' : left operand must be l-value.
  
 thank you very much. i await your answer.

Wow!  How did you find this list?  The last message I got here was over
two years ago.

And how did you choose this list?  Its name has little to do with your
problem.

In any case, try

if (num1 % 2 == 0)

and look for a C list or newsgroup for any subsequent problems you might
have.

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net


Pondering parameterized operators

2003-09-26 Thread Austin Hastings
So I sit here and think for a minute about how nice it will be in P6 to
be able to define 

  operator infix:eqi($str1, $str2) {...}

for doing

  if ($1 eqi last)

and I think about the whole 'C' string library. Which dredges up my old
questions about parameterized operators:

How can I conveniently pass an extra parameter to a historically binary
operator?

At one point, the colon was going to do that, but Larry took it back:

  if (Dough eqn:4 Douglas) # true
  { ...

The options left seem to be:

  package String;
  sub strncmp($a, $b, $n) {...}
  package main;

  sub infix:immed String::strncmp.assuming($n = 4);
  if (Dough immed Douglas) # ?

or:

  class InfixBinary is Code {...}
  # How do I create a type? -- I want to define a return-type-spec
  # that just guarantees context behavior.

  sub eqn($max) returns InfixBinary {
return String::strncmp.assuming($n=$max);
  }

  if (Dough eqn(4) Douglas) ...

Frankly, I like the second one.

=Austin



Re: Pondering parameterized operators

2003-09-26 Thread Dan Sugalski
On Fri, 26 Sep 2003, Austin Hastings wrote:

 How can I conveniently pass an extra parameter to a historically binary
 operator?

If it's one of the 'base' binary operators (addition, subtraction, and 
whatnot) you don't.

Dan



Re: Pondering parameterized operators

2003-09-26 Thread Luke Palmer
Austin Hastings writes:
 How can I conveniently pass an extra parameter to a historically binary
 operator?

I see a few possibilities.  The first, call it like a function:

if infix:eqn(Dough, Douglas, n = 4) {...}

Or, you could use the adverbial modifier Cwhere (well, not officially
yet, but I hope so):

if Dough eqn Douglas where n=4 {...}

But that has some problems, like putting the operator parameters really
far away from the operator, and forcing parentheses on a function call
on the right (lest the Cwhere be associated with the call).

More below.

 At one point, the colon was going to do that, but Larry took it back:
 
   if (Dough eqn:4 Douglas) # true
   { ...
 
 The options left seem to be:
 
   package String;
   sub strncmp($a, $b, $n) {...}
   package main;
 
   sub infix:immed String::strncmp.assuming($n = 4);

You probably mean:

our infix:immed ::= String::strncmp.assuming($n = 4);

   if (Dough immed Douglas) # ?
 
 or:
 
   class InfixBinary is Code {...}
   # How do I create a type? -- I want to define a return-type-spec
   # that just guarantees context behavior.
 
   sub eqn($max) returns InfixBinary {
 return String::strncmp.assuming($n=$max);
   }
 
   if (Dough eqn(4) Douglas) ...
 
 Frankly, I like the second one.

Yeah, I don't think it's a bad idea.  I think returning an infix
operator is not the way to go about it.  Perhaps optional (and named)
parameters on an infix operator could be taken from a parameter list:

sub infix:eqn ($a, $b, ?$n) {
substr($a, 0, $n) eq substr($b, 0, $n)
}

if Dough eqn(4) Douglas {...}

That's not terribly good at making different things look different.
It's pretty common to see parenthesized expressions on either side of an
operator.  

Hmm, since we're requiring no whitespace between a variable and it's
subscript, this should be possible:

if Dough [eqn 4] Douglas {...}

If we're going that far...

sub foo($a, $b) {
print $($a)y$b;
}
Dough [foo] Douglas;  # DoughyDouglas

Not sure I like that too well.

Luke


Re: Pondering parameterized operators

2003-09-26 Thread Dave Whipp
Austin Hastings [EMAIL PROTECTED] wrote
   if (Dough eqn(4) Douglas) ...

I wonder if the . operator is available here:

  if Dough eq.n(4) Douglas { ... }

that makes it intuitive how to define new equality methods. One thing of
concern is that we'd need whitespace rules to disambiguate things. I sense
some wonderful opportunities for obfuscation.


Dave.




Re: Autovivification (was Re: E6: assume nothing)

2003-09-26 Thread Paul Hodges

--- Larry Wall [EMAIL PROTECTED] wrote:
 On Mon, Sep 08, 2003 at 11:18:12AM +0200, Paul Johnson wrote:
 : By the way, I trust this will be addressed (if it hasn't been
 : already):
 : 
 : perl5 -le 'print gah! if exists $a{b}{c}; print phooey!
 :  if exists $a{b}'
 : 
 : perlfunc says:
 : 
 : This surprising autovivification in what does not at first--or
 : even second--glance appear to be an lvalue context may be fixed
 : in a future release.
 
 I sure hope so.  Perl 5 confuses reference contexts with lvalue
 contexts.  With the new vtable implementation of basic types, we
 ought to be able to substitute an always undefined array or hash
 vtable that can propagate non-existence outward in rvalue context.
 
 Larry

This one doesn't *quite* make me as strongly prompted to chuckle and
say Larry, you're an evil genius as the comments on macros in another
thread, but it still gives me a warm fuzzy particularly because we
know Good Larry is in charge, and Evil Genius Larry just works in the
sweatshop to satisfy his need to beat the Gods of Cryptocontext at
their own game. 

TMTOWTDI applies likewise to DWIMming! :)

Also, I'm very sorry Larry -- I hit the wrong button backing up to edit
this, and sent you an empty message. :(