簡體   English   中英

對於 Haskell 中的列表理解,Scala 中的等價物?

[英]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 在其標准庫中沒有evenodd函數(我不確定),實現它們也是微不足道的。 假設這樣(為了使其與原始 Haskell 版本最接近),Scala 代碼可能看起來像

val boomBangs = for {
  x <- xs
  if odd x
} yield if (x < 10) "BOOM!" else "BANG!"

免責聲明:我暫時無法編譯或測試它,所以不能保證它按原樣工作。

作為 for-comprehensions 的替代方案,這里有一個基於filtermap的解決方案:

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 實際上被編譯器翻譯成withFiltermapflatMap表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM