2011-07-04 68 views
2

C語言實際上是一種命令式語言。C語言和Haskell

Haskell我想是完全不同的,因爲它是一種函數式編程語言。

來自C(不是專家),爲了使Haskell達到足夠的知識水平,我必須面對的主要困難是什麼?

感謝

Melawe

+3

對不起,但我認爲這不是一個可以回答的問題。來自動態類型的命令式/ OO語言,我發現Haskell的*功能*方面幾乎不值一提。得到我的是*類型系統*。這完全取決於你的個人經驗...... – deceze

+1

我的意思是:在Haskell中你可以使用一個變量而不必聲明它,你可以使用函數作爲變量,類型聲明與C不同......我想是一種完全不同的態度走向編程... – Melawe

+0

嗯,是的,它是。所以很難告訴你你會遇到什麼麻煩。最後,你可以在C中進行函數式編程(在某種程度上),把函數調用嵌套在函數調用中。您已經在其他語言中練習得越多,您就越能準備好使用功能語言。 – deceze

回答

0

這取決於你的 「充足」 的定義。 Haskell單子可能非常難以掌握,但通過簡單的練習就可以讓自己開始學習,這樣你就可以習慣於以「功能性方式」思考問題,並熟悉類型系統。作爲初學者,我強烈建議您親自登錄Programming in Haskell

0

主要麻煩?我想你會首先錯過可變結構。

至少,當我花費了太多的時間來使用過程語言之後,我掌握了一種功能語言之後,會發生這種情況。

5

的非詳盡列表:

  • return並不意味着你認爲這意味着什麼。
  • if - then - else更類似於C的? - :比C的if - else。特別是,else分支不是可選的。
  • 縮進問題。在do區塊內使用if - then - else時要特別小心。
  • 沒有隱式轉換。 (有些功能可以在不同的數字類型之間進行明確的轉換,這是你最容易被這種情況絆倒的地方。)
  • 沒有C風格的循環。取而代之的是使用map/fmap/<$>,foldr /其他摺疊功能,filter,zip/zipWith/etc,或者根據您的「循環」做什麼列表解析。 (如果需要,遞歸可用。)
  • 可變狀態很難使用(通常是錯誤的解決方案)。