看板 PLT 關於我們 聯絡資訊
其實我看到這篇時,第一個想到的也是 List Comprehension。 先補上 haskell ghci 的版本。 這個版本跟 Python 版本差別不大,只是少 for in。 length[x|x<-[-1,-2,-3,0,1,2,3],x^2>5] 關於函數合成的部分,假如要先運算後比較,那通常可以用 filter \ 將兩個函數合成一個。 假設有兩個函數 a、b,然後有一個 List c。 那麼 filter a (map b c) == filter (a . b) c --dryman 指出這兩者出來的結果不同,前者為 [9.9] ,後者為 [-3,3] 在 haskell 中,「.」是用來做函數合成用的。 下面同樣是在 ghci 中使用。 let x = [-1,-2,-3,0,1,2,3] --假如要簡寫的話,可以改寫成 [-3..3] let sq x = x^2 let big x = x > 5 --假如 sq 跟 big 沒有打算重複使用的打算,可以改寫成 x^2 > 5。 let myBigLength x = length $ filter ( big . sq ) x myBigLength x 然後 length $ filter ( big . sq ) x == length ( filter ( big . sq ) x ) 以上是在下的拙見。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.113.132.136
dryman:filter (big.sq) x 會變成 [-3, 3] 耶...雖然說length沒差 05/03 14:12
感謝提醒,之前沒注意到會這樣!
dryman:length $ filter (>5) $ map (\x->x*x) [-3..3] 05/03 14:13
dryman:其實我比較喜歡這樣用lambda的寫法...XD 05/03 14:13
也是個好寫法阿! XDDD 那我要修正一下我寫的文章了。 ※ 編輯: drm343 來自: 59.113.131.155 (05/04 08:15)
noctem:那條規則是 filter p . map f = map f . filter (p.f) :) 05/05 21:33
原來是這樣,謝謝指導 ^_^ ※ 編輯: drm343 來自: 61.223.232.205 (05/11 23:31)