[英]For a list comprehension in Haskell the equivalent in Scala?
我正在閱讀 Haskell 的書“Learn You a Haskell for Great Good!”。 第 2 章用這個小例子解釋了列表理解:
boomBangs xs = [ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]
有人可以用 Scala 重寫這個列表推導式嗎? Scala 沒有偶數或奇數函數? 所以我必須使用
x%2!=0
檢查數字是否為奇數?
預先感謝您提供優雅的解決方案!
即使 Scala 在其標准庫中沒有even
或odd
函數(我不確定),實現它們也是微不足道的。 假設這樣(為了使其與原始 Haskell 版本最接近),Scala 代碼可能看起來像
val boomBangs = for {
x <- xs
if odd x
} yield if (x < 10) "BOOM!" else "BANG!"
免責聲明:我暫時無法編譯或測試它,所以不能保證它按原樣工作。
作為 for-comprehensions 的替代方案,這里有一個基於filter
和map
的解決方案:
def odd(x: Int) = x % 2 == 1
def boomBangs(xs: Seq[Int]) =
xs filter odd map {i => if (i < 10) "BOOM!" else "BANG!"}
boomBangs(3 :: 4 :: 5 :: 10 :: 11 :: 12 :: 13 :: Nil)
// List(BOOM!, BOOM!, BANG!, BANG!)
For-comprehensions 實際上被編譯器翻譯成withFilter
、 map
和flatMap
表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.