Peter Dalgaard wrote: > johnc.d...@yahoo.com wrote: > >> Full_Name: John C. Deva >> Version: 2.8.1 >> OS: Fedora Linux 8, 64 bit >> Submission from: (NULL) (193.200.150.189) >> >> >> I notice that it is possible to redefine 'if' as a function of an arbitrary >> number of arguments. Such redefined 'if' can then be used as any other user >> function, except for that the parser still demands exactly three arguments >> to be >> given to if. Furthermore, even if 'if' is defined with three arguments, its >> application must still be made with the original syntax, and not the usual >> syntax of function application: >> >> >>> `if` <- function(a,b,c) >>> >> + { >> + assign(deparse(substitute(a)), b+c, envir=parent.frame() >> + } >> >> >>> if (x) 1 else 2 >>> x >>> >> [1] 3 >> >> >>> if(x, 1, 2) >>> >> Error: unexpected ',' in "if(x," >> >> The later expression above should be the only valid when 'if' is redefined as >> above, but it is not the case. >> > > > A bug report with a ? in the title is in general ill-advised. If you are > not sure that something is a bug, then ask a question instead. > > In this case, no, it is not a bug. Syntax is syntax and "if(x,1,2)" is a > syntax error no matter how if() is defined. Parsing is controlled by the > fact that "if" is a keyword, the function definition is not used at all > at that stage. `if`(x,1,2) works perfectly well, though, at least until > you try deparsing it: > > >> quote(`if`(x,1,2)) >> > if (x) 1 else 2 > > > Redefining "if" is a really Bad Idea, excepting things like code > analysis tools (which I believe are the main reason it is not explicitly > forbidden). > >
i'm not quite sure i'm getting this last point (after that redefining 'if' is a bad idea, which it is, mostly). on further exploration, i found that r can be used to produce fancy patterns: 'function' = function(...) { print(list(...)); function(...) list(...) } # a function that prints its arguments and calls itself with the arguments and a list of the arguments # maximize the terminal, minimize the font size, and execute: function(whatever) NULL enjoy. vQ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel