Dra*_*gno 6 functional-programming
我想学习一门功能语言,以拓宽视野.我对Python和C/C++有所了解,并希望从一个来自语言命令领域的人那里学习一门语言.我不在乎语言是否足够强大.我只是想要一种语言来学习函数式编程的基础,然后我会尝试更难(和更强大的语言).
谢谢
我推荐这些教学目的的纯粹语言.它也很强大.如果你想要更受欢迎/更多社区支持的东西,那么我建议使用Scheme或OCaml,这取决于你是否更愿意处理不熟悉的语法(与Scheme一起使用)或者首先处理不熟悉的键入(与OCaml一起使用).SML和F#与OCaml略有不同.其他人已经或将要提到Clojure,Scala和Haskell.
Clojure是Scheme的变体,具有自己的特性(例如,没有尾调用优化),因此使用它将是一种以Scheme开头的方式.我希望你可以更轻松地使用不太特殊的Scheme实现.球拍是经常用于教学的.Scala看起来与OCaml基本相似,但这只是基于随意的熟悉程度.
与Haskell不同,提到的其他语言都有两个优点:(1)默认情况下评估顺序是急切的,尽管你可以通过特别请求它来获得懒惰的评估.在Haskell中则相反.(2)可以使用变异,尽管您将看到的大部分库和代码都不使用它.我实际上认为学习函数式编程在教学上更好,同时着眼于它如何与副作用相互作用,并在未来的道路上努力学习monadic风格的作品.所以我认为这是一个优势.有些人会告诉你,最好先将Haskell更加隔离的mutaton处理.
CMU的Robert Harper在教授函数式编程方面有一些很好的博客文章.据我所知,他也喜欢像OCaml这样的语言进行教学.
在我推荐的三类语言中(Pure,Scheme和朋友,OCaml和朋友),前两种语言都有动态类型.第一个和第三个具有明确的引用单元格(就像在Python中一样,您限制自己永远不会重新分配变量,但您仍然可以更改列表索引中存储的内容).Scheme具有隐式引用单元:变量本身看起来是可变的,如在C和Python中,并且引用单元处理在封面下完成.在这样的语言中,你通常也可以使用某种形式的显式引用单元格(如我在Python中给出的示例,或在Racket中使用可变对/列表......在其他方案中,包括Scheme标准,这些是默认对/列表).
Haskell确实拥有的一个优点是一些教科书正在出现.(我的意思是真诚地,而不是狡猾.)使用哪些书籍/资源是许多战争/封闭问题的另一个有争议的问题.其他人推荐的SICP有很多粉丝和一些评论家.在我看来,有很多好的选择.我不打算进一步讨论这些辩论.
归档时间: |
|
查看次数: |
5521 次 |
最近记录: |