読者です 読者をやめる 読者になる 読者になる

メモ:Rでは2+2=5か

ちょっと前に、Rの言語定義にこういうイカしたことが書かれているのに気づいてしまった。

Any expression is allowed also on the target side of an assignment, as far as the parser is concerned (2 + 2 <- 5 is a valid expression as far as the parser is concerned. The evaluator will object, though). (https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Infix-and-prefix-operators)

で、ためしてみたら、<-quote()で式として捕獲できるけど、

quote(2+2<-5)
2 + 2 <- 5

=は無理でした。これは評価順序の問題なのか…?

quote(2+2=5)
#> Error: unexpected '=' in "quote(2+2="

その上に書かれているこの順序を見てたらいける気がしてたけど、

The order of precedence (highest first) of the operators is

::
$ @
^
- +                (unary)
:
%xyz%
* /
+ -                (binary)
> >= < <= == !=
!
& &&
| ||
~                  (unary and binary)
-> ->>
=                  (as assignment)
<- <<-

「(as assignment)」ってついてるから、多分それより前に関数の引数の指定に使う=として解釈されるっぽい?

Although it is not strictly an operator, it also needs mentioning that the ‘=’ sign is used for tagging arguments in function calls and for assigning default values in function definitions.

とか思っていろいろ試してたら、関数であることを明示してやれば通った。気持ち悪いけど。

quote(`=`(2 + 2, 5))
#> 2 + 2 = 5

よくわからないのでこれでも聴いて心を落ち着けましょう。