21 --Primitive recursion constructor
22 pr :: ([Int] -> Int) -> ([Int] -> Int) -> ([Int] -> Int)
23 pr f g = \xs 0 -> f xs
24 pr f g = \xs (y+1) -> g xs y ((pr f g) xs y)
我希望这个函数创建的函数对不同的输入有不同的作用,这样它就可以创建一个递归函数。正如所料,上面的代码不起作用。除了它创建的函数之外,我该如何做类似模式匹配的事情呢?
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)
(记住f a b = ...
基本上是一个捷径f a = \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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)