我现在已经学习 F# 几个月了,学习F#的最大资产是将John Harrison的“实用逻辑和自动推理手册”(WorldCat )中的OCaml代码翻译成 F#。
由于这是一种如此有效的学习方法,我计划将更多书籍中的代码翻译成 F#,但书籍主要侧重于功能概念或现实世界应用程序,这些应用程序通常以使用诸如AI、编译器、定理证明器等功能语言编写而闻名和推理助理。
虽然人们会认为将程序从一种语言翻译成另一种语言可能是一项微不足道的任务,但实际上,在进行这种翻译时,不仅会遇到语言差异,而且还必须学习和理解进行翻译的环境和工具。需要探索两种语言及其环境的深度,而这些深度在阅读时通常不会被考虑在内。例如,在将 Ocaml 转换为 F# 时,我学习了顶级、ocamldebug和时间旅行、跟踪和希望 F# 有这个、camlp4以及它在 F# 中不存在的原因、异常处理性能差异和类型推断以某种方式迫使我以一种我无法通过仅用 F# 进行试验或阅读书籍来理解 F# 对应物的方式。
您是否知道任何其他使用/包含源代码的书籍,最好是函数式,涵盖函数式编程的概念,或者是通常用函数式语言编写的现实世界应用程序,并且通过翻译源代码有助于学习函数式编程到F#?
为了保持客观而不是主观,答案必须解释为什么它很重要,并且您必须使用过这本书而不仅仅是浏览过这本书。我正在寻找那些从事函数式编程多年的人的答案,他们发现通读这本书是他们在函数式编程方面取得成功的关键。答案示例:
类型推断- Benjamin C. Pierce 的“类型和编程语言”(WorldCat)。重要性:有助于了解如何解决类型推断编译器错误,从而找到解决错误的更好方法并生成更好的代码。
CPS - “ Compiling with Continuations ” ( WorldCat ) by Andrew W. Appel - 重要性:有助于消除递归中堆栈的使用,从而避免堆栈溢出并提高性能。我认为尾调用优化是优化函数,而 CPS 是优化程序。
Lambda Calculus - Greg Michaelson 撰写的“通过 Lambda 演算进行函数式编程的介绍”( WorldCat ) 重要性:Lambda 演算是函数式编程的基础。理解这个基本概念可以更好地理解函数式编程。
编辑
虽然我想推迟并等待一个更好的答案来接受,但我了解到,在 SO 上几天后,观点大大减少了。
我发现这两个答案对于不熟悉这些书籍的人来说都很棒,如果我还不知道并拥有大多数书籍的副本,我会认真考虑购买它们。
由于 PAD 注意到我所追求的更高级的书籍,我给了他接受投票。如果可以分开接受我会的。