Skip to content

syntax confusion with function/non-function objects (PR#694)

2 messages · Jonathan Rougier, Peter Dalgaard

#
I'm just back from a computer practical where we ran into
This definition was taken as legitimate, although using the
function generated the error message
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?  Surely a
number before an opening parenthesis is always a syntax error?
The other mistake does this:
Error: syntax error

Cheers, Jonathan.

--please do not edit the information below--

Version:
 platform = sparc-sun-solaris2.7
 arch = sparc
 os = solaris2.7
 system = sparc, solaris2.7
 status = 
 major = 1
 minor = 1.1
 year = 2000
 month = August
 day = 15
 language = R

Search Path:
 .GlobalEnv, Autoloads, package:base

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
J.C.Rougier@durham.ac.uk writes:
I don't think so... Splus 3.4 does likewise:
Error: "2" is not a function
Error in f(3): "2" is not a function
Dumped
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.
manifestly obvious that an expression cannot lead to a valid function.
Consider for instance the following silly stunt:
[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.