读了这个之后,我仍然不明白其中的区别
所以,与其问函数式编程和过程式编程之间有什么区别,我想,也许我熟悉的语言可以作为一个例子。
因此,我的问题是:R/SAS语言被认为是程序性的还是功能性的?
R主要是一种函数式编程语言。它确实有一些通过副作用完成的例外,所以它不像Haskell那样完全起作用。尽管如此,如果您不愿意调整您的编程风格以使用函数,那么在编写高效的R代码时会遇到相当大的困难。(我写这个答案的唯一原因是,将R称为面向对象语言会误导那些希望能够以与Java相同的方式向数据对象发送函数消息的人。R使用对象的类作为"通用"函数的调度选择机制,但这与完整的OO语言不同。)
R有三个、四个或五个主要对象类,这取决于您对它们和相关函数类型的看法。最初的S3函数只对其第一个参数的类进行调度,可能仍然是最常用的,尽管S4类可以对多个参数签名进行调度,在BioConductor世界中被广泛使用。引用类或R5或原型类对象最类似于真正的面向对象编程数据类型。我在最后一句话中有点含糊,因为我缺乏与他们相处的经验。
SAS主要是一种程序性语言。你可以定义函数,但这不是大多数人与SAS及其数据集交互的方式,至少一开始是这样。至少当我15年前使用它时,它并没有真正的对象模型。我认为,它的主要优势是对"报告写作"的卓越支持。
(数据操作"在R中很难"的评论只是表明缺乏经验。我在R中进行数据操作所需的代码量比我的SAS同事使用的代码要少得多。如果你开始在SAS中编程,那么转换将很困难,但我们这些改变的人通常都坚持使用R。)
我认为R肯定是程序性的;函数式编程远不止是利用函数,例如,使用一些粗略的模块化;事实上,f.p.致力于极端模块化,这是其主要优势之一;查阅约翰·休斯的经典论文《为什么函数式编程很重要》,了解更多信息。
对我来说,SAS似乎更有特殊的目的,它被设计成将数据组织成表格并对其进行统计报告。它似乎与函数式编程没有特别的关系;我仍在调查其程序功能(或缺乏程序功能)