Какова парадигма программирования R?

Какова парадигма программирования R (R как в GNU S)?

Я считаю, что знаком с языками программирования различных концептуальных парадигм (имею программирование на C ++, Java, Prolog и некоторых других языках), но хотя я уже пишу свои собственные небольшие сценарии R, я не уверен, какую парадигму R должен представлять.


person Community    schedule 23.05.2011    source источник
comment
Привет, я ценю все ответы, а Stack Exchange - замечательный сайт. Но отмечать это как несуществующий вопрос, на мой взгляд, немного несправедливо. Здесь, в Stack Exchange, есть еще несколько вопросов по шаблону. Какова парадигма программирования [некоторого языка программирования], а также на этот вопрос можно однозначно ответить однозначно. Я не понимаю, почему вы отметили это, Вубл, Джорис Мейс, Дирк Эддельбюттель, Андри и Чейз.   -  person    schedule 23.05.2011
comment
Если вы категорически не согласны с закрытием этого вопроса, вы можете пометить его для внимания модератора или опубликовать вопрос по этому поводу на Meta.   -  person Matt Ball    schedule 23.05.2011
comment
Повторный вопрос, поскольку я склонен согласиться с просьбой, что это не совсем не по теме. В лучшем случае это может быть вопрос, который можно перенести на programmers.stackexchange.com, но пока я просто открываю его заново.   -  person Lasse V. Karlsen    schedule 24.05.2011


Ответы (2)


R поддерживает смесь парадигм объектно-ориентированного и функционального программирования.

С функциональной стороны это:

  • имеет первоклассные функции
  • имеет ленивую оценку аргументов
  • поощряет чистые функции без побочных эффектов

Но

  • он не реализует рекурсию хвостового вызова
  • и легко создавать нечистые функции

На объектно-ориентированной стороне:

  • он имеет три встроенных парадигмы объектно-ориентированного программирования: S3 и S4, которые являются неизменяемыми и поддерживают общий стиль функций OO, и ссылочные классы (также известные как R5), которые являются изменяемыми и поддерживают более общий стиль передачи сообщений OO.

  • S4 находится под сильным влиянием OO-стиля common lisp (CLOS) и dylan.

  • Есть также ряд дополнительных пакетов, которые предоставляют другие типы ОО: proto, mutatr, R.oo, OOP.

Но

  • Встроенные объектно-ориентированные инструменты не содержат синтаксического сахара.
person hadley    schedule 25.05.2011

Согласно Википедии (курсив добавлен),

R поддерживает процедурное программирование с функциями и объектно-ориентированное программирование с общими функциями. Универсальная функция действует по-разному в зависимости от типа передаваемых ей аргументов. Другими словами, универсальная функция распознает тип объекта и выбирает (отправляет) функцию (метод), специфичную для этого типа объекта. Например, в R есть общая функция print (), которая может печатать почти все типы объектов в R с помощью простого синтаксиса print (objectname).

person Matt Ball    schedule 23.05.2011
comment
Фактически, R - это, прежде всего, функциональный язык программирования, хотя и не в чистом смысле слова Lisp (точно так же, как он не является процедурным в C-смысле слова или ООП в Java-смысле этого слова) - person Joris Meys; 23.05.2011
comment
У вас есть какие-нибудь ссылки, подтверждающие это? Избегает ли R изменчивости и имеет ли первоклассные функции? - person Matt Ball; 23.05.2011
comment
Хорошо. Типичное объяснение из Википедии. Я давно перестал даже проверять Википедию. Я понимаю, что такое общие функции, но не думаю, что это как-то связано с базовой парадигмой; у вас могут быть общие функции на любом языке, в котором есть функции. Наличие общих функций еще не делает его объектно-ориентированным. - person ; 23.05.2011
comment
@Matt Ball: см. Ответы на этот вопрос: http://stackoverflow.com/questions/4874867/learning-functional-programming-with-r. Википедия не всегда права ... ;-) - person Joris Meys; 23.05.2011
comment
@gojira: чтобы увидеть объектно-ориентированные парадигмы в R, проверьте классы S3 и S4 и недавнее добавление ссылочных (R5) классов. Весь проект Bioconductor (www.bioconductor.org) полностью объектно-ориентирован с использованием классов S4. Но не в Java-смысле этого слова. - person Joris Meys; 23.05.2011
comment
R5 - неправильное название, такого нет. - person mdsumner; 24.05.2011