Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
首先学习Scala';功能性';语言_Scala_Functional Programming - Fatal编程技术网

首先学习Scala';功能性';语言

首先学习Scala';功能性';语言,scala,functional-programming,Scala,Functional Programming,因为Scala是一种“面向对象与函数式”语言,所以我知道大多数面向对象概念(从学习Java开始),所以把Scala作为我的第一种函数式语言来学习对我来说是一个好主意吗 或者,如果我学习一门纯粹的函数式语言,比如Haskell,然后将我的OO知识和函数式编程知识混合在一起,以便更好地理解Scala,会更好吗 由于函数式编程与我所熟悉的有很大的不同,我想确保我学习的概念能够在函数式语言和函数式语言之间转换,而不会被OO和只与Scala相关的函数式概念所困扰 我建议使用一种比Scala更明确地公开其F

因为Scala是一种“面向对象与函数式”语言,所以我知道大多数面向对象概念(从学习Java开始),所以把Scala作为我的第一种函数式语言来学习对我来说是一个好主意吗

或者,如果我学习一门纯粹的函数式语言,比如Haskell,然后将我的OO知识和函数式编程知识混合在一起,以便更好地理解Scala,会更好吗


由于函数式编程与我所熟悉的有很大的不同,我想确保我学习的概念能够在函数式语言和函数式语言之间转换,而不会被OO和只与Scala相关的函数式概念所困扰

我建议使用一种比Scala更明确地公开其FP特性的语言。您仍然可以在Scala中编写OO代码,而不必使用FP

如果你想要学术上的纯洁,去学哈斯克尔。这种语言现在有一个丰富的生态系统,并且正在获得牵引力,而且肯定已经准备好生产,所以你不必担心你所学的东西会丢失。是一个伟大的起点,可以在网上免费获得

在某个时候,你可能想学习一种Lisp方言。现在有很多,成功程度各不相同,但您可能听说过Clojure,它运行在JVM之上

我不知道有什么好的免费资源,但我可以推荐。这本书有点老了——它涵盖了1.3版,而我们目前正接近1.7版——但仍然相关,而且直截了当。一旦你经历了这一切,你就准备好去吃更丰盛的东西,比如福格斯的《克洛尤尔的快乐》


在Clojure中还有一个很好的网站,上面有很多简短的编程问题,我建议你去看看——谷歌搜索'4Clojure'。

Scala是非常好的第一种函数式编程语言。我个人直到学习Scala之后才理解Haskell。学习Scala意味着唯一的新部分是函数式编程部分。你不必担心完全不同的语法或类型系统,也不必为了简单的IO而学习Monad。为了确保所学内容是可转移的,不要使用任何
vars
,只使用
vals

在某一点上,Scala的类型系统变得笨拙,因为您潜入隐式、协变和逆变的深渊,试图使用诸如单子之类的概念。在这一点上,您将拥有足够的函数式编程背景,可以切换到Haskell并真正理解它。Haskell的类型系统更适合此类主题


换句话说,Scala使函数式编程初学者的概念变得容易,而高级概念则更难,这使它成为一种非常好的网关语言。

令人恼火的是,这个问题被搁置了,我希望我在一年前问过它并得到了回答。就我个人而言,我会说学习哈斯克尔并不像人们想象的那么难,你只需要冷静地面对这样一个事实:你将从零开始,就像你不知道如何编程一样。我在工作中学会了使用Scala进行FP,但回顾过去,我希望我能学会Haskell。你需要在你的大脑中做出改变,哈斯克尔会强迫你更快地去做,因为这是唯一的方法。我还建议你阅读《小阴谋家》,没有它我就不会得到递归。我认为这更像是你喜欢的学习风格的问题。在Scala中,从第一天开始,您的工作效率就很高,但您的第一个程序功能性不强;您必须逐步地、渐进地采用更惯用、更实用的技术,而不仅仅停留在OO舒适区。在Haskell这样的游戏中,它将更像是“要么沉沦,要么游泳”;在你“得到它”之前,你可能会有几天感到沮丧,无法做任何事情,但这可能会迫使你学到更多。这两种方法都有各自的优点,这正是我所想的。谢谢你的推荐我被困在Haskell和Erlang之间,我的大学已经讲授了Erlang的基础知识,但我在很多地方都读到Haskell是一门很棒的语言,有什么建议吗?过去两年我一直在商业化地编写Erlang代码,它是一种很好的FP语言,适用于特定的问题域—具有故障转移保证的高度并发、分布式应用程序。虚拟机坚如磐石。但是,虽然你可以在其中写很多东西,但它是针对特定的问题领域的。Erlang中有趣的东西不是FP,而是通过消息传递、隔离状态和监控树处理进程故障转移的并发编程。我会把它留到你在其他地方接触过FP概念之后,比如在Haskell。太好了,Haskell就是这样。