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
は間違っていると感じます。誰もがより良い方法を知っていますか?