gpt4 book ai didi

haskell - lambda 表达式的模式匹配

转载 作者:行者123 更新时间:2023-12-04 00:40:37 24 4
gpt4 key购买 nike

 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 这样的东西。 .

关于haskell - lambda 表达式的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2801786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com