关于haskell:哪些语言实现了函数式编程的功能?

关于haskell:哪些语言实现了函数式编程的功能?

What languages implement features from functional programming?

Lisp在学术界很早就开发了一套有趣的语言功能,但是其中大多数从未在生产环境中流行。

某些语言(例如JavaScript)适应了垃圾回收和词法关闭等基本功能,但实际上可能会改变您大规模编写程序的所有方式(例如强大的宏,代码数据事物和自定义控件结构)似乎是在其他功能语言中传播的,而对于非平凡的项目而言,没有任何一种实用。

函数式编程社区还提出了许多其他有趣的想法(除了函数式编程本身),例如引用透明性,通用的大小写表达式(即模式匹配,不像C / C#开关那样残缺)和咖喱函数,在常规程序设计中似乎显然有用,并且应该易于与现有程序设计实践相集成,但是由于某种原因,它似乎永远留在学术界。

为什么这些功能很难采用?是否有实际上可以从Lisp中学习的现代实用语言,而不是半信半疑地复制"一流的功能",还是有固有的冲突使之不可能?


Are there any modern, practical
languages that actually learn from
Lisp instead of half-assedly copying
"first class functions", or is there
an inherent conflict that makes this
impossible?

为什么Lisp,Haskell,ocaml或F#不是现代的?

您可能只需要自己动手看一下它们,然后意识到它们更健壮(例如使用Java之类的库),便会想到。

从功能语言到其他语言,已经采用了许多功能。但是反之亦然-例如,(某些)功能语言具有对象。


Scala是一种很酷的功能/ OO语言,具有模式匹配,一流的功能等。它具有可编译为Java字节码并与Java代码良好互操作的优点。


语言"流行"与该语言是否具有强大的,经过充分研究的,精心设计的功能之间没有已知的关联。

关于这个问题已经说了很多。它在技术以及艺术中无处不在。我们知道,与艺术家B相比,艺术家A受过更多的训练,并且创作的作品更具广度和深度,但艺术家B在市场上的成功要大得多。是因为有一个时代精神吗?是因为艺术家B有更好的营销?是否因为大多数人不花时间去了解艺术家A?也许艺术家B暗中可怕,我们应该不信任对艺术家做出判断的专家吗?以上可能在某种程度上还是以上所有。

这驱使学习艺术的人们和学习编程语言的人们疯狂。


我建议您尝试Clojure。语法优美的方言,功能性(从ML角度而言)且快速。您将获得不变性,软件事务存储,多版本并发控制,REPL,SLIME支持和不竭的FFI。这是业务程序员的Lisp(&Haskell)。我在每天的真实工作中度过了愉快的时光。


我猜想,在现实世界中使用的Common Lisp并不是那么疯狂。


Python或Ruby。在问题"我喜欢Lisp但我的公司不允许我使用它。我应该怎么办?"的问题中,请参阅Paul Graham的想法。


最近,Erlang不仅通过被Twitter使用,而且通过XMPP驱动的消息传递和ejabberd等实现方式的兴起而获得了新的曝光。它具有许多功能编程思想,这些思想来自于功能编程。最初用于运行电话交换机,并由Ericson设想用于运行第一个GSM网络。它仍然存在,它具有完整的功能(作为一种语言),并在许多生产环境中使用。


Scala是采用重要学术特征的语言的绝对之王。更高种类,自我类型,多态模式匹配等。所有这些都是尖端的(或接近它)学术研究主题,已作为基本功能并入Scala。可以说,这损害了语言的简单性,但确实导致了一些非常有趣的模式。

C#比Scala更主流,但是C#所采用的"外部"功能较少。 LINQ对于Wadler的广义列表理解是有限的实现,并且每个人都知道lambda。但是尽管如此,C#(理所当然)在采用学术界的研究功能时仍然有些保守。


Lua中。

它被用作许多游戏(如《魔兽世界》)和应用程序(Snort,NMAP,Wireshark等)的脚本/扩展语言。实际上,根据Adobe开发人员的说法,Adobe的Lightroom占Lua的40%以上。

Lua背后的家伙曾多次将Scheme和Lisp列为对Lua的主要影响力,而Lua甚至被描述为不带括号的Scheme。


除了所说的以外,LISP的许多优点还基于保证没有副作用并使用内置数据结构。两者在现实世界中很少见。 ML可能是更好的功能基础。


Lisp developed a set of interesting language features quite early on in the academic
world, but most of them never caught on in production environments.

因为管理软件开发人员的人不是那种可以比较不同语言功能的有趣的人。在2000年左右,我想使用LISP在我们的公司网站上实现XML到HTML的转换(这是在Amazon在LISP中实现其后端的时候)。我没去当我为之工作的公司制造并出售Common LISP环境时,这有点讽刺。


C#3.0绝对可以。

C#现在有

  • Lambda表达式
  • 高阶函数
  • 映射/缩小+过滤器(可折叠?)到列表以及实现IEnumerable的所有类型。
  • LINQ
  • 对象+集合初始化器。
  • 最后两个列表项可能未经过适当的功能编程,无论如何,答案是C#从Lisp等实现了许多有用的概念。


    许多动态编程语言都实现了功能编程的思想。较新的.Net语言(C#和VB)具有所谓的lambda语言,但它们并非没有副作用。

    例如,将功能性编程和面向对象的编程中的概念组合起来并不难,但并不总是很有意义。面向对象的语言(试图)将状态封装在对象内部,而功能语言则将状态封装在函数内部。如果用一种语言组合对象和函数,则很难理解所有这些。

    有很多语言通过将它们放在一起来组合这些范式(F#),这很有用,但是我认为我们仍然需要几十年的时间来使用像这样的语言,直到我们能够成功创建一个新范式将结合oo和函数式编程的思想。


    您是否已签出F#


    实现功能编程功能的另一种"现实世界"语言是Javascript。由于绝对一切都具有价值,因此可以轻松实现高阶函数。您还具有其他函数式编程租户,例如lambda函数,闭包和curring。


    您所引用的功能("强大的"宏,作为数据编码的事物和自定义控件结构)尚未在其他功能语言中传播。他们在Lisp教我们一个坏主意之后就死了。

    现代功能语言(OCaml,Haskell,Erlang,Scala,F#,C#3.0,JavaScript)没有这些功能。

    干杯,
    乔恩·哈罗普。


    推荐阅读

      探探语言设置|探探怎么设置语言

      探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

      git设置编码|git语言设置

      git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

      流行木马软件五横向评测报告

      流行木马软件五横向评测报告,,五流行木马测试软件横向评测报告: 木马软件层出不穷,相信对于广大用户来说也带来了不少困惑,今天,壳带来安全性

      区域语言设置|区域语言设置工具

      区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

      c4d语言设置|c4d汉语设置

      c4d语言设置|c4d汉语设置,,1. c4d汉语设置mac版的C4D是这样的,中文字体是有的,但是是以拼音的形式存在,比如黑体就是ht。中文字体以拼音方式

      电脑宣传语|电脑宣传语言

      电脑宣传语|电脑宣传语言,,1. 电脑宣传语言1.我做好了与你过一辈子的打算,也做好了你随时要走的准备,2.每段青春都会苍老,但我希望记忆里的你