Guy*_*der 8 f# functional-programming
我现在花了几个月的时间学习F#,学习F#的最大资产是将John Harrison的" 实用逻辑和自动推理手册 "(WorldCat)中的OCaml代码翻译成F#.
由于这是一种非常有效的学习方法,我计划将更多书籍中的代码翻译成F#,但书籍主要关注功能概念或真实世界应用程序,这些应用程序通常以使用AI,编译器,定理证明等函数语言编写而闻名.和推理助理.
虽然人们会认为将一个程序从一种语言翻译成另一种语言可能是一项微不足道的任务,但实际上,当这样做时,不仅会遇到语言差异,还会考虑环境和工具,这些差异也必须学习和理解才能进行翻译.人们需要探索两种语言及其环境的深度,这些语言在阅读时通常不会被考虑.例如,在将Ocaml翻译为F#时,我学习了顶级,ocamldebug和时间旅行,跟踪和希望F#有这个,camlp4以及它在F#中是如何存在的,异常处理性能差异,以及类型推断的方式迫使我通过用F#试验或阅读书籍,以我不会拥有的方式理解F#对应物.
您是否知道任何其他使用/包含源代码的书籍,最好是功能性的,涵盖函数式编程的概念,或者是通常用函数式语言编写的实际应用程序,通过翻译源代码来帮助学习函数式编程到F#?
为了保持这个目标而不是主观,答案必须解释为什么它很重要,你必须使用这本书而不仅仅是浏览这本书.我正在寻找多年来一直从事函数式编程的人的答案,并且已经找到了通过这样一本书来完成函数式编程的关键.答案的例子:
类型推断 - 本杰明·C·皮尔斯的" 类型和编程语言 "(WorldCat).重要性:帮助理解如何解决类型推断编译器错误,从而导致更好的方法来解决错误并产生更好的代码.
CPS - 由Andrew W. Appel 编写的"使用Continuations进行编译 "(WorldCat) - 重要性:帮助在递归中删除堆栈的使用,从而堆栈溢出并提高性能.我认为尾部调用优化是优化函数,CPS是优化程序.
术语重写 - " 重写和所有那些 "(WoldCat)由Franz Baader和Tobias Nipkow重要性:ATP和Proof助手通常使用功能语言编写并依赖术语重写,如果术语重写不正确则证明引擎是无效.
Lambda演算 - " 通过Lambda演算进行功能编程的介绍 "(WorldCat)作者:Greg Michaelson重要性:Lambda演算是函数式编程的基础.理解这个基本概念可以更好地理解功能编程.
编辑
虽然我想推迟并等待接受更好的答案,但我了解到,经过几天的讨论后,这些观点大大减少了.
我发现这两个答案对于那些不熟悉书籍的人来说都很棒,如果我不知道并拥有大部分书籍的副本,我会认真考虑得到它们.
由于PAD注意到我所追求的更高级的书籍,我给他接受投票.如果可以分开接受我会.
你列出的看起来对我来说太可怕了.我建议一些更基本的:
Okasaki的纯功能数据结构书.本书使用SML符号; 由于缺乏仿函数,将其示例转换为F#具有挑战性.但好处是巨大的; 你会在这个过程中学到很多东西,另一方面可以帮助F#社区.正如@Jack P.所提到的,许多这些数据结构已被移植到F# ; 他们可能是一个很好的开始.
保尔森的工作程序员ML.我特别喜欢使用归纳来证明程序的正确性.本书中的一些重要例子,例如为lambda演算编写解释器和A战术定理证明器很有趣,并且接近您感兴趣的领域.
我非常钦佩你通过反复试验过程学习F#的持续性.如果你能在约翰哈里森的书之后存活下来,我想很少会对你产生挑战.我建议你用另一种函数式语言找到一个真正的应用程序,我们在F#中没有它并将其移植.例如,从本书的例子中,在F#中编写一个类似于Coq,Isabelle或Hol-light的简单证明助手并不是那么的.
归档时间: |
|
查看次数: |
894 次 |
最近记录: |