From p.dalgaard@biostat.ku.dk  Fri Oct 13 14:08:19 2000
From: p.dalgaard@biostat.ku.dk (Peter Dalgaard BSA)
Date: 13 Oct 2000 15:08:19 +0200
Subject: [Rd] syntax confusion with function/non-function objects (PR#694)
In-Reply-To: J.C.Rougier@durham.ac.uk's message of "Fri, 13 Oct 2000 13:07:26 +0200 (MET DST)"
References: <200010131107.NAA15331@pubhealth.ku.dk>
Message-ID: <x2u2ag7ut8.fsf@blueberry.kubism.ku.dk>

J.C.Rougier@durham.ac.uk writes:

> I'm just back from a computer practical where we ran into
> 
> > "f" <- function(x) 2(x^2) # for 2 * x^2
> 
> This definition was taken as legitimate, although using the
> function generated the error message
> 
> > f(3)
> Error in f(3) : attempt to apply non-function
> 
> Am I right in thinking that in prevous versions of R this
> definition would have been declared as a syntax error? 

I don't think so... Splus 3.4 does likewise:

> 2(3)
Error: "2" is not a function
>  "f" <- function(x) 2(x^2)
> f(3)                    
Error in f(3): "2" is not a function
Dumped


> Surely a
> number before an opening parenthesis is always a syntax error?

Sounds like it might be so (although sometimes there are surprises).
However, it may not be all that easy or worth it to fix the parser to
recognise this case.

In general you can have any expression evaluating to the function
to be called. If you do f(x)(3), f(x) may or may not be a function
and you can only detect whether it is one at runtime.

>From the parsers point of view there are only a few cases where it is
manifestly obvious that an expression cannot lead to a valid function.
Consider for instance the following silly stunt:

> g<-function(x){"+"<-function(x,y)log;(2+2)(x)}
> g(3)
[1] 1.098612

The operative bit is in src/main/gram.y

expr	: 
      ...

        |       expr '(' sublist ')'            { $$ = xxfuncall($1,$3); }

in which the expr is unrestricted and can be any R expression. One
could, I suppose, define a (say) "funexpr" syntactic entity which is just
like an "expr", except that if it is non-complex, then it has to be an
identifier or a character string. I think it would get quite kludgy,
though. 

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] syntax confusion with function/non-function objects (PR#694)
Peter Dalgaard BSA