gpt4 book ai didi

haskell - 对参数应用函数 x 次的函数

转载 作者:行者123 更新时间:2023-12-05 09:29:47 24 4
gpt4 key购买 nike

编写一个 doItX::(a -> a -> a) -> a -> Int -> a 函数,应用第一个参数 f x 次第二个参数。

doItX (*) 2 1 == 2

doItX (++) "a" 6 == "aaaaaa"

doItX (*) 2 3 == 8

我有以下代码:

doItX f a x
| x==1 = a
| x>1 = doItX f (f a a) (x-1)

如果 x 为 2 或更小,则可以正常工作,但对于第三个示例,它返回 16 而不是 8

最佳答案

可能最“惯用”的解决方案是基于库的解决方案:

doItX1 :: (a -> a -> a) -> a -> Int -> a
doItX1 f a x = foldr1 f (replicate x a)

Prelude function foldr1 documented here .

但是,如果出于您的某种原因,您坚持使用手动递归,那么您的代码就差不多了。您只需要修复递归调用:

doItX :: (a -> a -> a) -> a -> Int -> a
doItX f a x
| (x > 1) = ----Was: doItX f (f a a) (x-1)
f a (doItX f a (x-1))
| (x == 1) = a
| otherwise = error ("doItX called with x set to " ++ (show x))

关于haskell - 对参数应用函数 x 次的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70405751/

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