[Rd] syntax confusion with function/non-function objects (PR#694)
Luke Tierney
luke@goose.stat.umn.edu
Fri, 13 Oct 2000 08:33:57 -0500 (CDT)
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._