作者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)