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)
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |