函数式编程语言是否适合实际任务?

Clu*_*ess 23 functional-programming scientific-computing

在我对Haskell,Erlang和Scheme的实验中,我认为函数式编程语言是回答科学问题的绝佳方式.例如,获取一小组数据并对其进行一些广泛的分析以返回重要答案.这非常适合处理一些棘手的Project Euler问题或以原始方式尝试Google Code Jam.

与此同时,它们本质上似乎更适合寻找分析解决方案,而不是实际执行实际任务.我在Haskell中最强烈地注意到这一点,其中所有内容都被懒惰地评估,并且您的整个程序归结为一个巨大的分析解决方案,用于某些给定的数据,您要么硬编码到程序中,要么通过Haskell的有限IO功能搞乱.

基本上,我称之为"实用"的任务如

Aceept a request, find and process requested data,
 and return it formatted as needed

似乎更直接地翻译成程序语言.最幸运的是我找到了一个像这样工作的函数式语言,我将其比作Python的反向抛光符号版本.

所以我只是好奇我是否错过了这些语言中的某些内容,或者我对如何提出这个问题的方式感到失望.有没有人有功能语言的例子,这些语言非常适合执行最能通过函数式语言执行的实际任务或实际任务?

Bri*_*ian 8

关于语言,我认为F#是一个主要是"功能性"但也"实用"的语言的例子.Scala和Clojure可能是此类别中的其他人.

(更深层次,我认为'成功的公式'是一种强烈倾向于'功能'的语言,但可以访问大量的实用库(例如.Net/JVM /某些C FFI)并具有良好的工具(例如IDE支持).)

我至少在某种程度上同意这个问题的隐含前提,即"简洁/美丽的分析能力"和"语用学"之间存在着紧张关系.

  • 对于以CLR为目标的F#,你可以充分利用这两个方面:编写你的东西,这些东西对F#中的函数语言有益,然后使用F#代替其余东西,或者切换到C#或VB. NET,或者...... (3认同)

Jon*_*rop 5

有没有人能很好地执行实际任务或最好由功能语言执行的实际任务的功能语言示例?

我们的业务使用F#代码运行,从在线信用卡交易到网络分析,应有尽有。这些LOB应用程序由微型F#脚本组成,这些脚本可以快速,简单地使用.NET的无缝互操作和Outlook和Excel等应用程序的自动化来完成所需的一切。

我们的业务大部分都是用F#编写的销售软件,该软件可以解决许多领域的客户实际问题,从医疗设备嵌入式软件到海上互联网服务提供商。

  • 是的:就纯度而言,F#与所有流行的函数式编程语言都在同一类别(例如,OCaml,Scala,Clojure,Common Lisp,Scheme,Standard ML,Erlang,Mathematica)。除Haskell外,所有纯函数式语言都已绝迹,而正是由于Haskell在执行实际任务(由于纯净)方面不擅长,所以在学术界几乎很少使用。 (2认同)

Bli*_*ndy 5

有趣的是,你和我对“实际任务”的概念截然不同。你说的是:

接受请求,查找并处理请求的数据,并根据需要格式化返回

这几乎就是函数式语言的用途:获取数据并返回新数据的函数,而不在调用之间保留任何状态(即没有副作用)。这就是您这里所拥有的,也称为管道。

这不是我所说的实际任务。在现代程序中,您必须处理 GUI、多线程函数和网络 I/O。所有这些都具有在函数调用之间保存数据所需的状态。数据不会通过管道传输到函数中,结果也不会通过管道输出,函数也会影响“全局”状态。

正是这种“实际任务”的定义使得函数式程序开始失败。例如,如果您不使用它们的命令式扩展,那么在函数式程序中编写 GUI 几乎是不可能的。

所以总而言之,您所要求的答案是衷心的肯定,函数式程序可以胜任这项任务。然而,您真正寻找的答案是,它比这更复杂一些。

  • GUI 将采用响应式编程,多线程工作得非常好(参见 Scala/Akka Futures 和 Actors),IO 使用 IO monad 就可以了,最近还有 Iteratees。尽管如此,如果您不希望将所有这些概念合并到您的程序中,根据我的经验,具有有限命令部分的功能核心将提高软件的可维护性和稳定性。 (2认同)