作者drm343 (一卡那亞)
看板PLT
標題Re: [比較] 我為何鍾情於用 Scala 做為兵刃(三)
時間Sun May 1 10:06:04 2011
其實我看到這篇時,第一個想到的也是 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
1F:推 dryman:filter (big.sq) x 會變成 [-3, 3] 耶...雖然說length沒差 05/03 14:12
感謝提醒,之前沒注意到會這樣!
2F:→ dryman:length $ filter (>5) $ map (\x->x*x) [-3..3] 05/03 14:13
3F:→ dryman:其實我比較喜歡這樣用lambda的寫法...XD 05/03 14:13
也是個好寫法阿!
XDDD
那我要修正一下我寫的文章了。
※ 編輯: drm343 來自: 59.113.131.155 (05/04 08:15)
4F:推 noctem:那條規則是 filter p . map f = map f . filter (p.f) :) 05/05 21:33
原來是這樣,謝謝指導 ^_^
※ 編輯: drm343 來自: 61.223.232.205 (05/11 23:31)