From P.Dalgaard at biostat.ku.dk  Thu May 15 16:37:50 2008
From: P.Dalgaard at biostat.ku.dk (Peter Dalgaard)
Date: Thu, 15 May 2008 16:37:50 +0200
Subject: [Rd] ** operator
In-Reply-To: <Pine.LNX.4.64.0805151618200.17259@reclus.nhh.no>
References: <482C1988.90209@telenet.be>
	<482C1DD1.9090607@stats.uwo.ca>	<482C44DA.1090702@lancaster.ac.uk>
	<Pine.LNX.4.64.0805151618200.17259@reclus.nhh.no>
Message-ID: <482C4ABE.8020001@biostat.ku.dk>

Roger Bivand wrote:
> On Thu, 15 May 2008, Barry Rowlingson wrote:
>
>> Duncan Murdoch wrote:
>>
>>>  It's fairly unlikely to go away, but it's an old undocumented
>>> feature, so
>>>  use at your own risk.  There are lots of other undocumented
>>> features, but
>>>  maybe no others at the lexical level.  Check out src/main/gram.y if
>>> you
>>>  want to search for more at that level, and src/* if you want them
>>> at any
>>>  level.
>>
>>
>> I just had a quick browse in the source and I can't see where "**" is
>> defined. names.c relates ^ to the power operation in arithmetic.c but
>> no sign of "**":
>>
>> ./names.c:{"^",         do_arith,       POWOP,  1,      2,
>> {PP_BINARY2, PREC_POWER,  1}},
>>
>> grepping for POWOP doesn't help.
>>
>>  It's not an operator like '*':
>>>  get("**")
>> Error in get("**") : variable "**" was not found
>>>  get("*")
>> function (e1, e2)  .Primitive("*")
>>
>> and there's no ** in gram.y.
>>
>> searching for 'power' and quoted "**" doesn't help me either.
>> Searching for unquoted ** just produces too much C code to be useful.
>>
>> It's got to be there somewhere!!!
>
> Is there a clue in:
>
>> "^"(5, 2)
> [1] 25
>> "**"(5, 2)
> Error: could not find function "**"
>> 5 ^ 2
> [1] 25
>> 5 ** 2
> [1] 25
>
> that is, it is truly obfuscated and not accessible using contemporary
> interfaces?
Not really, just transcribed during the lexical analysis phase:

    case '*':
        if (nextchar('*'))
            c='^';
        yytext[0] = c;
        yytext[1] = '\0';
        yylval = install(yytext);
        return c;

(There's no "->" function either...)

-- 
   O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



[Rd] ** operator
Peter Dalgaard