Learn You a Haskell教程有一个在列表理解中使用let
活页夹的示例:
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2, bmi >= 25.0]
该函数接受一个身高/体重对的列表,并返回一个超出某个限制的相应体重指数的列表,例如:
ghci> calcBmis [(70, 1.85), (50, 2.00), (130, 1.62)]
[49.53513183965858]
对我来说有趣的是,在bmi
理解中绑定的值既可以在守卫中使用,也可以在结果表达式中使用。我知道如何在 Scala 中做类似事情的唯一方法是编写:
def calcBmis(xs : Seq[(Double,Double)]) =
for((w,h) <- xs ; bmi <- Some(w / (h*h)) if bmi >= 25.0) yield bmi
不得不在Some
这里包装我的价值感觉是错误的。有人知道更好的方法吗?