关于来自http://www.seas.upenn.edu/~cis194/lectures/02-lists.html的咖喱/不发情(schönfinkel/unschönfinkel)的定义,
schönfinkel :: ((a,b) -> c) -> a -> b -> c
schönfinkel f x y = f (x,y)
unschönfinkel :: (a -> b -> c) -> (a,b) -> c
unschönfinkel f (x,y) = f x y
但我认为上面的这些函数定义应该是:
schönfinkel :: ((a,b) -> c) -> a -> b -> c
schönfinkel f (x,y) = f x y
-- schönfinkel(curry) converts an uncurried function
-- (f (x,y), its type signature is (a,b) -> c)
-- to a curried function
-- (f x y, its type signature is a -> b -> c)
unschönfinkel :: (a -> b -> c) -> (a,b) -> c
unschönfinkel f x y = f (x,y)
-- unschönfinkel(uncurry) converts a curried function
-- (f x y , its type signature is a -> b -> c)
-- to an uncurried function
-- (f (x,y), its type signature is (a,b) -> c)
请有人给我一个简单的解释吗?
答案 0 :(得分:4)
您可能误读/误解了初始代码,正确的缩进可能足以使其正确:
schönfinkel :: ((a,b) -> c) -> a -> b -> c
schönfinkel f x y = f (x,y)
unschönfinkel :: (a -> b -> c) -> (a,b) -> c
unschönfinkel f (x,y) = f x y
现在,让我们打开ghci并尝试一些事情:
>>> let schönfinkel f x y = f (x,y)
>>> let toBeCurried (x,y) = x ++ y
>>> :t toBeCurried
toBeCurried :: ([a], [a]) -> [a]
>>> :t schönfinkel toBeCurried
schönfinkel toBeCurried :: [a] -> [a] -> [a]
查看您提供的非正式定义,您会发现它与schönfinkel
的行为相符。
答案 1 :(得分:-5)
以下是关于Dierk&amp ;;的Groovy In Action咖喱的一小段解释。共
基本思想是采用具有多个参数的函数 并通过修复一些值将其转换为具有较少参数的函数。一个典型的例子是选择一些任意值n,并将一个将两个参数相加的函数转换为一个函数,该函数接受一个参数并向其中添加n。
Groovy有一个内置的Closure方法叫做 curry ,它接受任意值绑定到闭包参数,并在绑定后返回闭包的克隆相应参数的值。请参阅以下链接以获取详细信息