From luke@goose.stat.umn.edu  Fri Oct 13 14:33:57 2000
From: luke@goose.stat.umn.edu (Luke Tierney)
Date: Fri, 13 Oct 2000 08:33:57 -0500 (CDT)
Subject: [Rd] syntax confusion with function/non-function objects (PR#694)
In-Reply-To: <x2u2ag7ut8.fsf@blueberry.kubism.ku.dk> from Peter Dalgaard BSA at "Oct 13, 2000 03:08:19 pm"
Message-ID: <200010131333.IAA23307@goose.stat.umn.edu>

Peter Dalgaard BSA wrote:
> 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
> 

I agree--I'd call this a type error in evaluation, not a syntax error.

One thing to keep in mind is that R expressions can be used for things
other that evaluation, for example in representing aspects of models.
Someone might want at some point to attach meaning to something like

	y ~ 2(x)+z

That would be impossible (or at least very dificult) if the expression
were made syntactically invalid.

It would be possible to have a semantic checking tool for R that walks
over the code and warns when it sees such an expression, but it should
not be considered an error since it could be legitimate.

luke

-- 
Luke Tierney
University of Minnesota                      Phone:           612-625-7843
School of Statistics                         Fax:             612-624-8868
313 Ford Hall, 224 Church St. S.E.           email:      luke@stat.umn.edu
Minneapolis, MN 55455 USA                    WWW:  http://www.stat.umn.edu
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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)
Luke Tierney