如何在Scala中编写咖喱函数

时间:2018-08-22 16:10:14

标签: scala haskell currying function-composition

Scala中可能会编写咖喱函数吗?例如:

def a(s1: String)(s2: String): Int = s1.length + s2.length
def b(n: Int): Boolean = n % 2 == 0

def x : String => String => Boolean = a andThen b

x("blabla")("foo") 

编辑:

我在Haskell中找到了一种方法:

a :: String -> String -> Int
a s1 s2 = length s1 + length s2

b :: Int -> Bool
b n = mod n 2 == 0

c :: String -> String -> Bool 
c = curry (b . (uncurry a))

1 个答案:

答案 0 :(得分:1)

这应该有效:

def x = a _ andThen (_ andThen b)

第一个_避免调用a并将其变成函数值。此值的类型为String=>String=>Int,即采用String并返回String=>Int的函数。

andThen方法的参数是一个函数,该函数采用原始函数的结果并对其进行修改。因此,在这种情况下,它需要一个使用String=>Int并返回新值的函数String=>Boolean。我们可以通过在原始函数上使用andThen来构造此新函数。这将使用a的结果,并将其与新函数b组成。