【问题标题】:What is the programming paradigm of R?R的编程范式是什么?
【发布时间】:2011-05-25 10:39:57
【问题描述】:

R 的编程范式是什么(如 GNU S 中的 R)?

我相信自己熟悉不同概念范式的编程语言(有 C++、Java、Prolog 和其他一些语言的编程语言),但是虽然我已经编写了自己的小型 R 脚本,但我不确定 R 应该代表哪种范式.

【问题讨论】:

  • 嘿,感谢所有答案,Stack Exchange 是一个很棒的网站。但在我看来,将其标记为“不是一个真正的问题”有点不公平。 Stack Exchange 上还有其他几个问题,遵循“什么是 [某种编程语言] 的编程范式”模式,这也是一个可以清楚明确地回答的问题。我不明白你为什么要举报,Wooble、Joris Meys、Dirk Eddelbuettel、Andrie 和 Chase。
  • 如果你强烈反对这个问题的结束,你可以标记它以引起版主的注意,或者在 Meta 上发布一个关于它的问题。
  • 重新提出问题,因为我倾向于同意这并不是真正离题的要求。最多可能是一个可以迁移到programmers.stackexchange.com的问题,但现在我只是重新打开它。

标签: r paradigms


【解决方案1】:

R 支持混合使用面向对象和函数式编程范式。

在功能方面:

  • 具有一流的功能
  • 对参数进行惰性求值
  • 鼓励纯粹的、无副作用的函数

但是

  • 它没有实现尾调用递归
  • 而且很容易创建非纯函数

在面向对象方面:

  • 它具有三个内置的 OO 范例:S3 和 S4,它们是不可变的并支持通用函数样式 OO,以及引用类(又名 R5),它们是可变的,并支持更常见的消息传递样式 OO。

  • S4 深受 OO 风格的 common lisp (CLOS) 和 dylan 的影响。

  • 还有许多提供其他类型 OO 的贡献包:protomutatrR.ooOOP

但是

  • 内置的 OO 工具几乎没有提供语法糖。

【讨论】:

    【解决方案2】:

    根据Wikipedia(强调添加),

    R 支持带有函数的过程式编程和带有泛型函数的面向对象的编程。泛型函数的行为取决于它传递的参数类型。换句话说,通用函数识别对象的类型并选择(调度)特定于该对象类型的函数(方法)。例如,R 有一个通用的 print() 函数,它可以使用简单的“print(objectname)”语法打印 R 中几乎所有类型的对象。

    【讨论】:

    • R 实际上最重要的是一种函数式编程语言,尽管不是纯粹的 lisp 意义上的(就像它不是 C 意义上的程序,或者Java 字义)
    • 您有任何参考资料可以支持吗? R 是否避免可变性并具有一流的功能?
    • 好的。典型的维基百科解释。我很久以前甚至停止检查维基百科。我了解泛型函数是什么,但我认为这与底层范式无关;您可以使用任何具有功能的语言来使用通用功能。仅仅因为有泛型函数并不能使它更加面向对象。
    • @Matt Ball:查看这个问题的答案:stackoverflow.com/questions/4874867/…。维基百科并不总是正确的...... ;-)
    • @gojira :查看 R 中的面向对象范例,检查 S3 和 S4 类,以及最近添加的引用 (R5) 类。整个 Bioconductor 项目 (www.bioconductor.org) 完全面向对象,使用 S4 类。但不是 Java 意义上的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2010-12-09
    • 2019-10-15
    • 2011-02-09
    • 2010-11-10
    • 2010-09-13
    • 2011-10-15
    相关资源
    最近更新 更多