F#高级练习

27

我已经阅读完关于F#的书籍,并完成了大部分基础练习。现在我正在寻找更多高级练习,以提高我的语言技能和函数式编程概念。

是否有一个地方或一本书,可以通过专门设计的练习来学习F#的语言特性?目前,我只能找到入门级的内容,或者是一些通用的编程问题网站(例如Project Euler)。

我的目标是真正学会如何用函数式思维考虑,并熟悉诸如模式匹配、部分应用函数、单子/工作流、尾递归等等的内容。我想学会使用函数式构造解决问题。

我也会对为其他函数式编程语言(如Haskell)设计的好练习感兴趣。


1
好的,它们是专门设计的练习,但你可以试试这里:http://stackoverflow.com/questions/tagged/f# :) - Benjol
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ruben Bartelink
谢谢,(奇怪的是我找不到这个问题了,看起来它已经被删除了 :/) - foobarcode
4个回答

27
如果你相信通过实践学习,那么Project Euler problems可能是适合你的练习。它们不仅限于函数式编程,但适用于F#和其他函数式语言的数学特性。 Yet Another Project Euler Series 是开始使用F#进行Project Euler的好资源。
我曾经通过99 problems 学习Prolog,但我也看到有人通过它们来学习Lisp、Haskell、OCaml等语言。我认为这些练习是学习F#的有用资源。
它们是设计良好的问题。前几个问题教你如何处理列表(F#中的基本数据结构)。更高级的逻辑、树和图问题是探索高级F#功能的好机会。在这里,可以参考OCamlF#的解决方案集。

99个问题正是我正在寻找的练习类型!我甚至找到了一个f#版本的解决方案:http://fssnip.net/tags/Ninety-Nine+F%23+Problems - foobarcode
我认为我在我的答案 https://github.com/paks/99-FSharp-Problems 中给出了相同的解决方案集合。我更喜欢使用Github,因为它对于多个文件来说更有组织性。 - pad
是的,你说得对,我有点急于点击你发布的“99个问题”链接,忘记查看你回答中的其他部分了 ;) - foobarcode

15

我通过完成前50个Project Euler问题来入门。那是一次很好的初始学习经历。

不久之后,我开始积极参与Stackoverflow F#标签。看到其他人提供的答案,并自己进行研究回答问题非常有教育意义(你知道人们说教学促进学习是真的)。

然后,我最大的学习经验来自于在F#开源项目上的工作。即FsEyeUnquote。这两个想法都来自于反思自己在F#方面的经验,并看到存在哪些丰富F#生态系统的机会。对于FsEye而言,它是增强FSI体验。对于Unquote而言,它则是利用了F#的一个独特功能。这两个认真做项目的“学以致用”的经验真正使我达到了对F#的深刻理解和技能水平。


赞同开源建议。Project Euler问题很好,但它们有点“狭窄”——与完整的应用程序一起工作和努力是真正开始理解的地方。我的第一个F#库是一个巨大的学习过程,我目前正在将机器学习算法从Python书籍转换为F#,我发现这非常有教育意义。此外,我需要这些算法 :) - Mathias

7

tryfsharp.org是一个非常好的学习F#的网站。教程根据技能水平和问题领域进行划分。它可能正是你所需要的。


谢谢您的回答,我已经浏览了tryfsharp.org。那里的例子对于初学者来说是很好的介绍语言的材料,但我正在寻找更高级的内容。 - foobarcode
微软关闭了 tryfsharp.org 网站。 - Preza8

4

HackerRank 提供算法挑战。这个网站有一个完整的部分专门针对函数式编程,当你创建解决方案时,可以选择 F# 作为你的首选语言。

在函数式编程中,可以在不同的任务组之间进行选择:递归、函数式结构、解析器等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接