Haskell - let

Haskell - let

我们可以在函数中使用where比较轻松的在函数底部绑定变量,他对包括所有guard在内的整个函数可见。可我们还想要更多的功能,比如函数处理过程中可能需要一些局部变量,或者做一些临时运算,那么let可以完成这个功能。

1
2
3
4
5
6
7
8
cylinder :: Double -> Double -> Double
cylinder r h =
let sideArea = h * r * 2
topArea = pi * r * r
in sideArea + topArea

main = do
print $ cylinder 3 10

let < bindings > in < expressions > let中绑定的名字只能在in中使用
let 和 where最大的区别就是 let是一个表达式,表达式一定是有一个返回值的,而where不是。所以let可以在几乎任何地方使用。

从一个元组中取值

1
(let (a, b, c) = (1, 2, 3) in a + b + c) * 100

这里让a,b,c分别匹配到了数字1, 2, 3, 之后再相加乘以100,最后结果是600

列表推导式中的let

1
2
calcBmis :: [(Double, Double)] -> [Double]
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2]
1
2
calcBmis :: [(Double, Double)] -> [Double]
calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2, bmi > 25.0]

Haskell - let
http://cvrain.cloudvl.cn/2023/11/21/Haskell/haskell-let/
作者
ClaudeRainer
发布于
2023年11月21日
许可协议