如何在Haskell中使用部分函数应用程序

时间:2017-01-23 00:57:24

标签: haskell currying partial-application

我正在尝试使用部分应用程序来缩短以下有效的函数定义:

ltest50 n = take 50 (iterate ltestonce n)

我想的是:

ltest50 = take 50 (iterate ltestonce)

ltest50 = take 50 (iterate ltestonce$)

会做到这一点,但没有快乐。在Haskell中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

Haskell为此提供了“点运算符”或“函数组合(.) :: (b -> c) -> (a -> b) -> a -> c

ltest50 n = take 50 (iterate ltestonce n)

相当于:

ltest50 = take 50 . iterate ltestonce

(.)定义为:

(.) :: (b -> c) -> (a -> b) -> a -> c
(.) f g x = f (g x)

或者更短一些:

(.) :: (b -> c) -> (a -> b) -> a -> c
(.) f g x = f $ g x

由于它是括号之间的符号,这意味着它可以用作.作为中缀运算符,因此:

ltest50 = take 50 . iterate ltestonce

是“ syntactical sugar ”for:

ltest50 = (.) (take 50) (iterate ltestonce)

至少在法兰德斯(比利时的荷兰部分),运营商有时被非正式地称为“之后”,因为您在对变量应用f后应用g