学习F#:哪些使用其他编程语言的书籍可以翻译成F#来学习函数概念?

学习F#:哪些使用其他编程语言的书籍可以翻译成F#来学习函数概念?,f#,functional-programming,F#,Functional Programming,我现在已经学习了几个月,学习F的最大优势是将johnharrison的“”()中的代码翻译成F 由于这是一种非常有效的学习方法,我计划将更多书籍中的代码翻译成F#,但这些书籍主要关注或通常以使用函数式语言(如和)编写而闻名 虽然有人会认为将一个程序从一种语言翻译成另一种语言可能是一项琐碎的任务,但实际上,这样做不仅会在语言上产生差异,而且在环境和工具上也会产生差异,必须学习和理解这些差异才能进行翻译。我们需要探索两种语言及其环境的深度,而这些深度在阅读时通常不会被考虑。例如,在将Ocaml翻译成

我现在已经学习了几个月,学习F的最大优势是将johnharrison的“”()中的代码翻译成F

由于这是一种非常有效的学习方法,我计划将更多书籍中的代码翻译成F#,但这些书籍主要关注或通常以使用函数式语言(如和)编写而闻名

虽然有人会认为将一个程序从一种语言翻译成另一种语言可能是一项琐碎的任务,但实际上,这样做不仅会在语言上产生差异,而且在环境和工具上也会产生差异,必须学习和理解这些差异才能进行翻译。我们需要探索两种语言及其环境的深度,而这些深度在阅读时通常不会被考虑。例如,在将Ocaml翻译成F#的过程中,我学到了,时间旅行,希望F#拥有它,以及它在F#中是如何不存在的,并且以一种迫使我理解F#对应物的方式,而不仅仅是用F#进行实验或阅读书籍

您是否知道其他任何使用/包含源代码(最好是函数式)的书籍,这些书籍涵盖函数式编程的概念,或者是通常用函数式语言编写的真实世界应用程序,通过将源代码翻译成F#来帮助学习函数式编程

为了保持客观而不是主观,答案必须解释为什么它很重要,你必须使用这本书,而不仅仅是浏览这本书。我正在寻找那些多年来一直从事函数式编程的人的答案,他们发现通过这样一本书工作是他们在函数式编程方面取得成功的关键。 答案示例:

  • 本杰明·C·皮尔斯的作品。重要性:有助于理解如何解决类型推断编译器错误,从而找到更好的方法来解决错误并生成更好的代码

  • -“”(Andrew W.Appel)–重要性:有助于消除递归中堆栈的使用,从而避免堆栈溢出并提高性能。我认为尾部调用优化是对函数的优化,CPS是对程序的优化

  • -“”()由Franz Baader和Tobias Nipkow编写重要性:通常使用函数式语言编写,并依赖术语重写,如果术语重写不正确,则证明引擎无效

  • -“”()格雷格·迈克尔森重要性:Lambda演算是函数式编程的基础。理解这一基本概念有助于更好地理解函数式编程

编辑

虽然我想推迟等待一个更好的答案来接受,但我已经了解到,几天后,人们的观点会大大减少

我发现对于那些不熟悉这些书的人来说,这两种答案都是很好的,如果我不知道并且有大部分书的拷贝,我会认真考虑得到它们。


由于PAD注意到了我所追求的更先进的书籍,我给了他接受票。如果你能拆分,我会接受。

考虑到你问题中列出的标题,你已经远远领先于基础。但谈到基本面,我建议考虑:

(本书的FP语言为米兰达语)

而且一直都很经典


(这本书的FP语言是Scheme)

我觉得你们的列表太可怕了。我提出了几个更基本的建议:

  • 冈崎的书。本书使用SML符号;由于缺少函子,将其示例转换为F#是一项挑战。但好处是巨大的;在这个过程中,你会学到很多东西,另一方面,你会极大地帮助F#community。正如@Jack P.所提到的,这些数据结构中的许多已经被删除;这对你来说可能是一个很好的开始

  • 保尔森。我特别喜欢使用归纳法来证明程序的正确性。书中的几个大例子,例如为lambda演算编写解释器和战术定理证明器,都很有趣,并且接近您感兴趣的领域

  • 胡达克。这本书将给你非常有趣的时间和成就感,因为你完成它与现实世界和令人兴奋的应用程序。此外,书中还有很多关于设计DSL的有用信息

  • 我真的很佩服你坚持通过反复试验的过程来学习F#。如果你能在约翰·哈里森的书之后活下来,我想很少有人会对你有挑战性。我建议您用另一种函数式语言找到一个真正的应用程序,我们在F#中没有这种语言,并对其进行移植。例如,从书中的例子来看,用F#编写一个简单的证明助手与之类似,或者说不太一样

    我发现你对其他问题的回答是网站上最好的。我不敢相信你会觉得这些很可怕。这两本书我都有,而且都很好。谢谢你添加它们。帕卢森的书的最后一章对于定理证明非常有帮助。@GuyCoder:谢谢你的夸奖。我真的很支持你所做的事。保持你的精神。老实说,我还没有看过HolLight的源代码。但是我相信你已经有了一个很好的基础来做这件事。你的项目是开源的并且在某处可用吗?如果你需要的话,我可以帮你:)@pad有人已经把很多(全部?)代码从纯函数数据结构翻译成了F#,也许你可以在你的帖子中加上这一点:ML是我在Uni的第一门CS课程,Paulson是我的讲师。但正是C#让我真正进入了编程领域。也许我会再看一次他的书。请注意,“CPS”方法对SML/NJ的性能造成了极大的伤害。其物理评估模型违反了硬件中内置的太多假设。如果你使用SML的大型符号应用程序,如Isabelle/HOL、SML/NJ和