2015-06-30 3 views
12

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

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

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

+5

Я могу вам дать то, что Хэдли Уикхем думает о вашем вопросе, прочитайте [здесь] (http://adv-r.had.co.nz/Functional-programming. HTML). – SabDeM

+3

Можно разделить этот вопрос на два, поскольку R и SAS совершенно разные, особенно когда речь идет о объектно-ориентированном программировании. – C8H10N4O2

ответ

14

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

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

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

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

+0

Не являются ли макросы SAS эквивалентом функций? Я уверен, что изобретатели SAS считают это процедурным, потому что все это «proc» :) – Victor

+0

@Victor: Я действительно говорил, что вы должны определять функции с помощью SAS, хотя я сомневаюсь, что существует много способов отправки механизма, как с R. Я сильно подозреваю, что все еще не так, что новым пользователям SAS учат писать SAS-макросы. –

+0

Спасибо. Я читал, что функциональные языки, естественно, подходят для параллельной обработки.Легко ли выполнять параллельную обработку в R, подобно тому, как мы говорим (инфраструктура исполнителя Java) – Victor

1

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

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