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

Are statistical programming languages like R/SAS considered functional or procedural

看完还是不明白其中的区别this

所以,与其问函数式编程和过程式编程之间的区别是什么,我想,也许我熟悉的一种语言可以作为一个例子。

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

R 主要是一种函数式编程语言。它确实有一些例外情况是通过副作用完成的,所以它不像 Haskell 那样功能齐全。尽管如此,如果您不愿意调整您的编程风格以使用函数,您将很难编写高效的 R 代码。 (我写这个答案的唯一原因是,将 R 称为面向对象的语言会误导那些希望能够以与 Java。R 使用对象的 class 作为 "generic" 函数的调度选择机制,但这与完整的 OO 语言不同。)

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

SAS 主要是一种过程语言。您可以定义函数,但这不是大多数人与 SAS 及其数据集交互的方式,至少一开始是这样。至少在我 15 年前使用它时,它并没有真正的对象模型。我认为它的主要优势是对 "report writing".

的出色支持

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

我会说 R 绝对是过程性的;函数式编程不仅仅是使用函数,例如,使用一些粗略的模块化;确实 f.p。致力于极端模块化,这是其主要优势之一;查看 John Hughes 的经典论文 "Why functional programming matters" 以了解更多信息。

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