Haskell lambda表达式的模式匹配

Haskell lambda表达式的模式匹配,haskell,Haskell,我希望这个函数创建的函数对不同的输入有不同的作用,这样它就可以创建一个递归函数。正如预期的那样,上述代码不起作用。我该如何做模式匹配之类的事情,但对于它所创建的函数呢 谢谢 或者干脆 pr f g = \xs y' -> case y' of 0 -> f xs (y+1) -> g xs y ((pr f g) xs y) (请记住,fab=…基本上是fa=\b->…的快捷方式,这是f=\a->\b->…的

我希望这个函数创建的函数对不同的输入有不同的作用,这样它就可以创建一个递归函数。正如预期的那样,上述代码不起作用。我该如何做模式匹配之类的事情,但对于它所创建的函数呢

谢谢

或者干脆

pr f g = \xs y' -> case y' of 0     -> f xs
                              (y+1) -> g xs y ((pr f g) xs y)
(请记住,
fab=…
基本上是
fa=\b->…
的快捷方式,这是
f=\a->\b->…
的快捷方式)

请注意,n+1模式已被弃用,并且您为pr指定的类型与您(和我)的定义不匹配

具体地说,根据您的类型,该函数接受一个
[Int]>Int
(f),然后是一个接受另一个
[Int]>Int
(g)的函数,然后是一个接受
[Int]
(xs)的函数,然后返回一个Int。但是,您使用三个参数调用g,最后一个返回的函数接受两个参数,所以你大概想要像
([Int]->Int)->([Int]->Int->Int->Int)->[Int]->Int->Int
这样的东西

pr f g = \xs y' -> case y' of 0     -> f xs
                              (y+1) -> g xs y ((pr f g) xs y)
pr f g xs 0 = f xs
pr f g xs (y+1) = g xs y ((pr f g) xs y)