像R / SAS这样的统计编程语言是否被认为是功能性或程序性的

时间:2015-06-30 18:16:36

标签: r functional-programming sas procedural-programming

阅读this

后,我仍然不明白其中的差异

因此,我想,也许我熟悉的一种语言可以作为一个例子,而不是询问功能与程序编程之间的区别。

因此,我的问题是:R / SAS语言是程序性的还是功能性的?

2 个答案:

答案 0 :(得分:18)

R主要是一种函数式编程语言。它确实存在一些例外,其中事情是通过副作用完成的,因此它不像Haskell那样完全正常。尽管如此,如果您不愿意调整编程风格来使用函数,那么编写高效的R代码将会遇到相当大的困难。 (我写这个答案的唯一原因是,调用R是一种面向对象的语言会误导那些来到它的人,期望能够以与他们一样的方式向数据对象发送函数消息Java.R使用对象的类作为"泛型"函数的调度选择机制,但这与完整的OO语言不同。)

R具有三个,四个或五个主要对象类,具体取决于您如何看待它们以及相关的函数类型。原始的S3函数仅在其第一个参数的类上进行调度可能仍然是最常用的,尽管可以在多个参数签名上分派的S4类在BioConductor世界中被广泛使用。参考分类或R5或原始分类对象最类似于真正的面向对象编程数据类型。我在最后一句话中有点模糊,因为我对它们缺乏经验。

SAS主要是一种程序性语言。您可以定义函数,但这并不是大多数人与SAS及其数据集进行交互的方式,至少在开始时是这样。至少在我15年前使用它时,它并没有真正的对象模型。我认为它的主要优势是对#34;报告撰写的优越支持"。

(数据操作的评论是" R&#34很难;只是表明缺乏经验。我在R中进行数据操作所需的代码量远远少于我的SAS同事使用的代码。如果您开始使用SAS进行编程,那么转换将很难,但是我们这些已经改变的人通常会坚持使用R。)

答案 1 :(得分:1)

我会说R绝对是程序性的;功能编程不仅仅是利用功能,例如,使用一些粗略的模块化;确实f.p.致力于极端模块化,这是其主要优势之一;查阅经典论文"为什么功能编程很重要"约翰休斯要了解更多信息。

对我而言,SAS似乎更特殊,旨在将数据组织到表格中并对其进行统计报告。它似乎与函数式编程没有特别的关系;我仍在调查其程序能力(或缺乏程序能力)