Oop 您认为函数式语言适合于具有大量业务规则但计算量很少的应用程序吗?

Oop 您认为函数式语言适合于具有大量业务规则但计算量很少的应用程序吗?,oop,programming-languages,functional-programming,Oop,Programming Languages,Functional Programming,我确信,对于需要大量计算的应用程序(数据挖掘、AI、nlp等),函数式编程是一个很好的选择 函数式编程是否在任何著名的企业应用程序或开源项目中使用?他们是如何将业务逻辑整合到功能设计中的 请忽略这样一个事实:很少有人使用函数式编程,而且这有点难 谢谢如果没有功能,什么是业务规则?规则的应用可以表示为对一组数据应用函数。它也可以与多态性相结合。e、 g.通过通用函数(多个分派也很方便)和继承 代码就是数据,数据就是代码,两者都应该像水一样。像Clojure和Scala这样的函数式编程语言几乎适用于

我确信,对于需要大量计算的应用程序(数据挖掘、AI、nlp等),函数式编程是一个很好的选择

函数式编程是否在任何著名的企业应用程序或开源项目中使用?他们是如何将业务逻辑整合到功能设计中的

请忽略这样一个事实:很少有人使用函数式编程,而且这有点难


谢谢

如果没有功能,什么是业务规则?规则的应用可以表示为对一组数据应用函数。它也可以与多态性相结合。e、 g.通过通用函数(多个分派也很方便)和继承


代码就是数据,数据就是代码,两者都应该像水一样。

像Clojure和Scala这样的函数式编程语言几乎适用于任何东西。至于Haskell,一个有经验的Haskell编程人员可能能够用任何语言来代替Haskell,以解决任何问题—效率与否。我不知道是否有一种函数式编程语言可以被认为是解决这个特定问题的所有语言中最好的一种,但请放心,将在这方面非常有效


此外,Clojure和Scala也在JVM上实现。因此,从技术上讲,它们/是/在企业平台上。

我假设,当您谈论许多业务规则时,您考虑的是应用程序开发。应用程序开发,即您希望对真实世界的工作流建模。与普通编程不同,应用程序开发涉及更高级别的责任(特别是对于需求捕获和测试)。如果是这样,我强烈建议您看看是否可以应用领域驱动开发。领域驱动开发的自然选择是面向对象的方法。这一点以及许多程序员擅长面向对象编程这一事实是它在应用程序开发中流行的原因之一。然而,这并不意味着现实世界中的大型项目总是以这种方式编写(阅读)。

一年多前,我深入研究了Haskell,并尝试了一些我认为是典型业务问题的事情(坦率地说,考虑到许多价值观,正确的回答是什么?)。因此,我想说,是的,您应该能够用函数式编程对许多业务问题进行建模

就我个人而言,我在Haskell中找不到可以像C#那样推动OO+函数方法的明显性,但这很可能是因为我在Haskell上做得不多,在C#上做得更多

然后是如何与客户沟通的问题。我的经验是,他们中的许多人严格按照时间顺序思考,这有利于命令式编程。即使进入状态变化等模型,你也可能失去这个奇怪的客户。考虑可能代表业务按时间顺序操作的函数组合和单子可能会超出许多客户的范围


无论哪种方式,您都可以找到我的business-y示例。

从我看到的情况来看,Scala似乎可以很好地处理普通Java。因此,Java可以为业务处理的任何事情,Scala也可以

在.NET方面,F#是函数式语言的另一个很好的例子,它适用于“业务”应用程序。简单地说,F#能做C#能做的一切,而且更容易

但对于这两种语言,“大型编程”倾向于借用OOP。并不是说混合东西有什么问题,但也许这不是你所要求的。如果您想坚持一种更实用的方法,比如说,不使用对象,那么您可能会遇到更多的麻烦,因为工具支持将不在同一级别。对于易于与.NET/Java集成的语言来说,这并不是什么大问题


至于“明智吗?”:这取决于项目、公司和其他环境因素。似乎一种常见的“企业模式”是,代码必须被极度简化,以便任何人都可以使用它。在这种情况下,可能会有人认为使用lambda会让其他人难以理解

您可能想查看,它是函数式语言Clean的库,专门用于表示工作流和业务流程

但是,对于一个典型的企业应用程序,如果有很多业务规则,但计算量不大,那么使用函数式编程是否明智呢

业务规则只是计算,您通常可以使用函数式编程更简洁、更清晰地表达它们

越来越多的企业应用程序是用函数式语言编写的。Citrix XenDesktop和XenServer构建在主要用OCaml编写的工具堆栈上。MyLife人物搜索引擎是用OCaml编写的。我们是一家小公司,但我们所有的LOB软件(如信用卡交易、账户、网络分析)都是用F#编写的。微软在Bing上的广告使用F#代码。也许最明显的例子是任何使用C#和.NET最新版本的人,因为他们几乎肯定使用函数概念(例如委托)


如果你指的是更奇特的函数式语言,如Clojure、Scala和Haskell,那么我相信有些人正在使用它们,但我自己没有任何细节。

Haskell很难。Clojure和Scala以及类似的语言都很简单,我似乎直言不讳。我为删除设置了我的答案,我很高兴看到,所以还没有结束这个问题。我明白了,但另一方面,这是人们想听到/学习的东西。您使用的明确问题可能是“保存恩典”或“此w/b作为意见关闭”,我的0。02@Sruly我们不是都很固执己见,直言不讳到了我们感到舒服的程度吗?我不能