在Haskell中对变量使用反斜杠

在Haskell中对变量使用反斜杠,haskell,Haskell,我正在学习haskell并找到了这个函数。我用反斜杠理解 您可以创建lambda函数 -- >(\x -> (fst x)* (snd x)) (2,3) -- 6 我不明白的是反斜杠在这里的用法。谁能给我解释一下吗 voltea::(a -> b -> c) -> b->a->c voltea = \f -> \x -> \y -> f y x main = print(voltea div 2 6) 记住,这个 f = \

我正在学习haskell并找到了这个函数。我用反斜杠理解 您可以创建lambda函数

-- >(\x -> (fst x)* (snd x)) (2,3)
-- 6
我不明白的是反斜杠在这里的用法。谁能给我解释一下吗

 voltea::(a -> b -> c) -> b->a->c
 voltea = \f -> \x -> \y -> f y x
 main = print(voltea div 2 6)
记住,这个

f = \x -> <thing>

voltea f = (\x -> (\y -> f y x))
voltea f x = \y -> f y x
voltea f x y = f y x
voltea f x y = f y x

voltea f = (\x -> (\y -> f y x))
voltea f x = \y -> f y x
voltea f x y = f y x
voltea f x y = f y x

voltea f = (\x -> (\y -> f y x))
voltea f x = \y -> f y x
voltea f x y = f y x
voltea f x y = f y x

现在,请记住,在Haskell中,函数只是可以传递到其他函数中的常规对象,您应该能够理解最后一行的作用。

所有Haskell函数都是curry函数。将函数应用于其参数的过程是右关联的。它允许以以下方式重写
voltea

voltea :: (a -> b -> c) -> b -> a -> c
voltea =
  \ f ->        -- `voltea` is a lambda taking one parameter `f`.
    (\ x ->     -- It returns another lambda which takes `x`.
      (\ y ->   -- That lambda return another lambda again which takes `y`.
        f y x)) -- And that last lambda applies `f` to `y` and `x`
因此,这与将
voltea
写入表单相同: