在Imperative programming下待久了,對於Functional language的一切都是覺得很新鮮。
Learn You a Haskell for Great Good!看到中途,筆記一下一些新觀念。
List comprehension
跟數學裡面Set comprehension
的表達方法很像,假設我們想要找出直角三角形中,周長小於50的三元組的數量。 (假設 a <= b <= c 且 a ^ 2 + b ^ 2 = c ^ 2)。
如果是以往的作法,大概會像這樣
1 | for (int a = 1; a <= 10; a++) |
如果是Haskell會是這樣,不同的語言寫法會不一樣,不過這上面列的C++11實作方式還不如上面來的直覺。
1 | let xs = [(a, b, c) | a <- [1..50], b <- [a..50], c <- [b..50], a ^ 2 + b ^ 2 == c ^ 2, a + b + c < 50] |
Pattern Matching
這邊跟我們常知的Pattern Matching不太相同,