我是Haskell的初学者。我写了一个函数,它将多次函数应用于参数:
frepeat :: (Integral n) => n -> (a -> a) -> a -> a
frepeat n f a
| n <= 0 = error "Invalid count."
| n == 1 = f a
| otherwise = f (frepeat (n-1) f a)
有效:
ghci> frepeat 3 (^2) 2
256
ghci> frepeat 4 (++ "-bla") "bla"
"bla-bla-bla-bla-bla"
现在我想重写更紧凑,没有最后一个参数。我想 - 它必须是部分应用的功能。我试过这个:
frepeat :: (Integral n) => n -> (a -> a) -> a -> a
frepeat n f
| n <= 0 = error "Invalid count."
| n == 1 = f
| otherwise = f (frepeat (n-1) f)
但GHCi不吃它......这是否意味着我无法做到?
答案 0 :(得分:4)
你在最后一部分只需要一个额外的(。)
| otherwise = f . (frepeat (n-1) f)
一般来说,这个
let f x = f (g x)
可以改写为
let f = f . g