Являются ли такие языки статистического программирования, как R/SAS, функциональными или процедурными

Я все еще не понимаю разницу после прочтения этого

Итак, вместо того, чтобы спрашивать, в чем разница между функциональным и процедурным программированием, я подумал, может быть, язык, который мне знаком, может служить примером.

Следовательно, мои вопросы: считаются ли языки R/SAS процедурными или функциональными?

Ответ 1

R - это прежде всего функциональный язык программирования. У него есть некоторые исключения, когда делаются побочные эффекты, поэтому он не настолько функциональен, как Haskell. Тем не менее, если вы не хотите адаптировать свой стиль программирования для использования функций, вам будет довольно сложно писать эффективный R-код. (Единственная причина, по которой я пишу этот ответ, - это то, что вызов R объектно-ориентированным языком будет вводить в заблуждение людей, которые приходят к нему, ожидая, что сможет отправлять функциональные сообщения объектам данных так же, как и с Java. R использует класс объектов как механизм выбора отправки для "общих" функций, но это не та же парадигма, что и полные OO-языки.)

R имеет три, четыре или пять основных классов объектов в зависимости от того, как вы думаете о них и связанных с ними типах функций. Исходные функции S3, которые отправляются только по классу их первых аргументов, вероятно, все еще наиболее часто используются, хотя S4-класс, который может отправлять несколько сигнатурных сигнатур, широко используется в мире BioConductor. Объекты с эталонным классом или R5 или прото-классифицируются как наиболее похожие типы объектов объектно-ориентированного программирования. В этом последнем предложении я немного расплывчата, потому что мне не хватает опыта с ними.

SAS - это прежде всего процедурный язык. Вы можете определять функции, но это не так, как большинство людей взаимодействуют с SAS и его наборами данных по крайней мере поначалу. По крайней мере, когда я использовал его 15 лет назад, у него действительно не была объектная модель. Я бы сказал, что его основным преимуществом является превосходная поддержка "написания отчета".

(Комментарий, что манипуляция данными "трудна в R" просто указывает на недостаток опыта. Объем кода, который мне нужен для обработки данных в R, намного меньше, чем код, используемый моими коллегами SAS. Если вы начали программировать в SAS, то преобразование будет сложным, но те из нас, кто изменился, вообще застряли с R.)

Ответ 2

Я бы сказал, что R определенно процедурный; Функциональное программирование - это гораздо больше, чем использование функций, например, с использованием некоторой грубой модульности; действительно, f.p. стремится к крайней модульности, которая является одной из ее основных сильных сторон; посмотрите классическую статью Джона Хьюза "Зачем нужно программировать".

SAS кажется более конкретной целью для меня, чтобы организовать данные в таблицах и делать статистические отчеты на том же самом. Кажется, что нет никакого конкретного отношения к функциональному программированию; Я все еще изучаю его процедурные возможности (или их отсутствие).