绑定单个值以便理解

Phi*_*ppe 4 haskell scala for-comprehension

学习你Haskell的教程有一个例子使用let列表中理解粘结剂:

calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2, bmi >= 25.0]
Run Code Online (Sandbox Code Playgroud)

该函数采用高度/重量对列表,并返回超出某个限制的相应体质量指数列表,例如:

ghci> calcBmis [(70, 1.85), (50, 2.00), (130, 1.62)]
[49.53513183965858]
Run Code Online (Sandbox Code Playgroud)

这里有趣的是,bmi理解中绑定的值既可以用于保护,也可以用在结果表达式中.我知道如何在Scala中执行类似操作的唯一方法是编写:

def calcBmis(xs : Seq[(Double,Double)]) =
  for((w,h) <- xs ; bmi <- Some(w / (h*h)) if bmi >= 25.0) yield bmi
Run Code Online (Sandbox Code Playgroud)

不得不把我的价值包裹在Some这里感觉不对.谁知道更好的方法?

om-*_*nom 13

是的,有这样的语法.

def calcBmis(xs : Seq[(Double,Double)]) =
  for((w,h) <- xs ; bmi = w / (h*h); if bmi >= 25.0) yield bmi
Run Code Online (Sandbox Code Playgroud)

单线替代(但不理解):

calcBmis.map(wh => wh._1/(wh._2*wh._2)).filter(_>=25.0)
Run Code Online (Sandbox Code Playgroud)