Dear all,
`?Syntax` documents that `?` has the lowest precedence, right under `=`.
Indeed it reads:
*The following unary and binary operators are defined. They are listed in
precedence groups, from highest to lowest. *
and ends the list with
*<- <<-* *assignment (right to left)*
*=* *assignment (right to left)*
*?* *help (unary and binary)*
I believe it to be wrong, `=` has lower precedence than `?`.
See the following example :
`?` <- `+`
x = 2 ? 3
x
#> [1] 5
We see that `2 ? 3` is evaluated first, then the result is assigned to x,
showing
higher precedence for `?`.
Compare it to the similar code using `<-` :
x <- 2 ? 3
#> [1] 5
x
#> [1] 2
Here first `x <- 2` is evaluated, then its output is added to 3, and the
result
`5` is printed. and we verify that `x` is still `2`. Showing lower
precedence
for `?` consistent with the doc.
Hadley Wickham's package `lobstr` makes it easy to compare the parse trees:
lobstr::ast({x = 2 ? 3})
#> o-`{`
#> \-o-`=`
#> +-x
#> \-o-`?`
#> +-2
#> \-3
lobstr::ast({x <- 2 ? 3})
#> o-`{`
#> \-o-`?`
#> +-o-`<-`
#> | +-x
#> | \-2
#> \-3
Best regards,
Antoine
[[alternative HTML version deleted]]
> From: R-devel [mailto:r-devel-bounces at r-project.org] On Behalf Of Ant F > Sent: 29 August 2019 12:06 > To: r-devel at r-project.org > Subject: [Rd] ?Syntax wrong about `?`'s precedence ? > ... > See the following example : > > `?` <- `+`I'm curious; What did you expect to happen if you replace the function '?' with the operator '+' ? ? is surely now being evaluated as a user-defined function and not as an operator. Would you expect the results of doing that to be the same as evaluation without replacement? S Ellison ******************************************************************* This email and any attachments are confidential. Any use...{{dropped:8}}
Precedence is a property of the parser and has nothing to do with the semantics assigned to various symbols. Using just core R functions you can see the precedence of '?' is between those of '=' and '<-'.> # '=' has lower precedence than '?' > str(as.list(parse(text="a ? b = c")[[1]]))List of 3 $ : symbol $ : language `?`(a, b) $ : symbol c> str(as.list(parse(text="a = b ? c")[[1]]))List of 3 $ : symbol $ : symbol a $ : language `?`(b, c)> # '<-' has higher precedence than '?' > str(as.list(parse(text="a ? b <- c")[[1]]))List of 3 $ : symbol ? $ : symbol a $ : language b <- c> str(as.list(parse(text="a <- b ? c")[[1]]))List of 3 $ : symbol ? $ : language a <- b $ : symbol c Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Aug 30, 2019 at 4:41 AM Stephen Ellison <S.Ellison at lgcgroup.com> wrote:> > From: R-devel [mailto:r-devel-bounces at r-project.org] On Behalf Of Ant F > > Sent: 29 August 2019 12:06 > > To: r-devel at r-project.org > > Subject: [Rd] ?Syntax wrong about `?`'s precedence ? > > ... > > See the following example : > > > > `?` <- `+` > > I'm curious; What did you expect to happen if you replace the function '?' > with the operator '+' ? > ? is surely now being evaluated as a user-defined function and not as an > operator. > Would you expect the results of doing that to be the same as evaluation > without replacement? > > S Ellison > > > > > ******************************************************************* > This email and any attachments are confidential. Any u...{{dropped:10}}