我究竟如何将此let / where函数转换为Haskell中的lambda?
让我们对帐单:
calc x = let ad5 x = x + 5
sqr x = x * x
dbl x = x * 2
in
ad5 . sqr . dbl $ x
申报表在哪里
calc x = ad5 . sqr . dbl $ x
where
ad5 x = x + 5
sqr x = x * x
dbl x = x * 2
Lambda形式?可能类似于Get Prog中的示例,在该示例中先声明变量,然后在底部定义变量:
sumSqrOrSqrSum4 x y = (\sumSqr sqrSum ->
if sumSqr > sqrSum
then sumSqr
else sqrSum) (x^2 + y^2) ((x + y)^2)
答案 0 :(得分:5)
这个想法是这个let
表达式:
let x = y in z
与该lambda完全相同:
(\x -> z) y
将y
用作参数,并因此绑定到x
。
对于您而言,这将导致:
calc x = (\ad5 sqr dbl -> (ad5 . sqr . dbl $ x))
(\x -> x + 5)
(\x -> x * x)
(\x -> x * 2)
当然,在本练习之外,很少有人会这样写:)
答案 1 :(得分:1)
对lambda的最简单直接的翻译是
calc = \x -> (x*2)*(x*2) + 5
尽管显然您可以使用基本数学来简化该表达。