我现在正在学习Haskell,我对此感到非常好奇。 例如:
minus :: Int -> Int -> Int -> Int
minus x y = x - y - z
如果我想先将 y 而不是 x 传递给函数 [minus],该怎么办?我想要一个函数 [minus x 5 z] 我不想要这个
minusy10 x z = minus x 10 z
如果我必须定义一个新函数来实现这一点,我觉得它失去了一些“Haskell 优雅”。
你的
minus10
是一种非常惯用的做法;通常它被绑定在 where
子句中,这样就不会扰乱顶层 API。 flip minus 10
和 (`minus` 10)
也是常见的选择。这两个选择仅适用于填写“第二个”参数;更一般地说,为了填充第 n 个参数,lambda 可以更好地泛化,如 \x -> minus x 10
所示。