2013-02-06 72 views
19

我已經完成了關於F#的書籍閱讀,而且本書中大部分練習都是基本的。現在我正在尋找更高級的練習,以通過語言和函數式編程概念提高我的技能。F#高級練習

是否有一個地方或一本書,我可以練習F#以及專門設計的練習來學習語言特徵?現在我只能設法找到介紹性的東西或一般的編程問題網站(例如Project Euler)。

我的目標是真正學習如何以功能性的方式進行思考,並習慣諸如模式匹配,部分應用函數,monads /工作流,尾遞歸等等。我想學習如何使用功能結構來解決問題。

我也會對任何爲其他函數式編程語言(如Haskell)設計的優秀練習感興趣。

+1

那麼,他們是特別設計的練習,但你可以做比嘗試更糟糕[這裏] :) – Benjol

+1

你正在尋找F#codebases在另一個Q我建議Foq和TickSpec作爲偉大的思想食物。Paket也值得一看,如果你正在尋找更簡單的東西,ZeroToNine,FunDomain/FsUno.Prod可能會很有趣。 –

+0

謝謝,(奇怪我找不到這個Q,看起來像刪除了:/) – foobarcode

回答

18

如果你相信通過親身體驗學習,Project Euler problems可能是你的練習。它們不限於函數式編程,但其數學性質非常適合F#和其他函數式語言。 Yet Another Project Euler Series是在F#中開始使用Project Euler的好資源。

我曾經通過99 problems學習Prolog,但我看到人們也通過它們學習Lisp,Haskell,OCaml等。我認爲這些練習是學習F#的有用資源。 他們是精心設計的問題。前幾個教你學習列表(在F#中的基本數據結構)。邏輯,樹和圖形上更先進的問題是探索高級F#特性的好機會。以下是OCamlF#中的一組解決方案,以備需要時參考。

+0

99問題正是我正在尋找的練習類型!我甚至設法找到了解決方案的f#版本:http://fssnip.net/tags/Ninety-Nine+F%23+Problems – foobarcode

+0

我想我在我的回答中給出了同樣的解決方案https:// github.com/paks/99-FSharp-Problems。我更喜歡Github,因爲它更多地組織成多個文件。 – pad

+0

是的,你是對的我有點急於點擊你發佈的99個問題鏈接,忘記檢查你的答案;) – foobarcode

5

tryfsharp.org是學習F#的好地方。教程按技能水平和問題領域進行細分。這可能就是你正在尋找的東西。

+0

感謝您的回答,我已經通過tryfsharp.org。這裏的例子對第一次介紹這門語言很有幫助,但我一直在尋找更先進的東西。 – foobarcode

11

我開始了通過第一個50 Project Euler問題。這是一個很好的初步學習經驗。

不久後,我開始積極參與Stackoverflow F#標記。看到別人提供的答案,並且不得不研究我自己的答案,這很有教育意義(你知道他們對教學的看法,這是真的)。

那麼我最大的學習經驗來自F#中的開源項目。即FsEyeUnquote。這兩個想法都反映了我對F#的經驗,並且看到了豐富F#生態系統的機會。在FsEye的情況下,它增強了FSI的經驗。在Unquote的情況下,它利用了獨特的F#功能。這兩個人通過對嚴肅的項目進行經驗學習是真正讓我對F#有深刻理解和技巧的。

+0

FsEye真的很好,謝謝分享。 – foobarcode

+0

同意開源建議。歐拉項目的問題非常好,但它們有點「狹隘」 - 在一個完整的應用程序中工作和掙扎是事情真的開始爲我點擊的地方。我的第一個F#庫是一個巨大的學習,我目前正在將機器學習算法從一本Python書籍轉換爲F#,我發現這非常具有啓發性。另外,我需要這些算法:) – Mathias

1

HackerRank爲您提供算法挑戰。整個章節專門討論了functional programming,當您創建解決方案時,您可以選擇F#作爲您選擇的語言。

在函數式編程中,您可以在不同的任務組中進行選擇:遞歸,函數式結構,解析器等等。