Re: [比較] 我為何鍾情於用 Scala 做為兵刃(三)

看板PLT (程式語言與理論)作者 (一卡那亞)時間13年前 (2011/05/01 10:06), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串6/11 (看更多)
其實我看到這篇時,第一個想到的也是 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

05/03 14:12, , 1F
filter (big.sq) x 會變成 [-3, 3] 耶...雖然說length沒差
05/03 14:12, 1F
感謝提醒,之前沒注意到會這樣!

05/03 14:13, , 2F
length $ filter (>5) $ map (\x->x*x) [-3..3]
05/03 14:13, 2F

05/03 14:13, , 3F
其實我比較喜歡這樣用lambda的寫法...XD
05/03 14:13, 3F
也是個好寫法阿! XDDD 那我要修正一下我寫的文章了。 ※ 編輯: drm343 來自: 59.113.131.155 (05/04 08:15)

05/05 21:33, , 4F
那條規則是 filter p . map f = map f . filter (p.f) :)
05/05 21:33, 4F
原來是這樣,謝謝指導 ^_^ ※ 編輯: drm343 來自: 61.223.232.205 (05/11 23:31)
文章代碼(AID): #1DlC0EzH (PLT)
討論串 (同標題文章)
文章代碼(AID): #1DlC0EzH (PLT)