Как распределяется атрибут в R с точки зрения грамматики языка? - PullRequest
0 голосов
/ 04 марта 2019

Проблема

В R вы можете назначить атрибут следующим образом:

attr(x, "foo") <- "bar"

Я понимаю, что это делает, но я пытаюсь понять, как это утверждение разбивается на болеефундаментальные части языка R.

Мысли

Хотя attr является функцией, она также является частью грамматики фундаментального языка, поскольку вы не можете сделать это:

t = attr
t(x, "bar") <- "baz" # gives an error

Наиболее похожий синтаксис, который я могу придумать, заключается в PHP, где вы можете назначить, "вызывая" list "функцию" следующим образом:

list($a, $b) = array(1, 2);

Я понимаю строку вышеиметь следующую грамматику:

list_assignment:
    list(<var>...) = <expression>;

Казалось бы, имеет смысл, что в R грамматика определяется аналогично:

attr_assignment:
    attr(<var>, <expression>) <- <expression>;

Но вы также можете написать это:

x = `attr<-`(x, "bar", "baz")

Кажется, что для этого потребуется одно из следующих действий:

  • Специальная поддержка `attr<-`(<var>, <expr>, <expr>) в грамматике
  • Реальная функция с именем attr<-, которая выполняеттак же, как attr(...) <- под капотом

Резюме

Как это должноs attr назначение должно рассматриваться с точки зрения более простых элементов языка?Как насчет `attr<-`?Кроме того, как они реализованы в парсере R?

...