gpt4 book ai didi

Haskell - 合并文件夹和复制?

转载 作者:行者123 更新时间:2023-12-02 20:30:57 26 4
gpt4 key购买 nike

现在我知道如何使用foldr,我通常会在脑海中编写递归函数,例如当我看到:

   sum xs = foldr (+) 0 xs

我的想法是:

   sum [] = 0
sum (x:xs) = x + sum xs

据我所知,这基本上就是foldr 的意思。

现在,我有这个代码:

   printLine :: [Int] -> String
printLine [] = "+"
printLine (x:xs) = '+' : replicate x '-' ++ printLine xs

它的作用是,以 [5,4] 为例,然后打印“+-----+----+”。现在,我真的很想知道如何使用foldr 来编写这个。它遵循递归函数的一般思想,所以我认为它应该是可行的。我尝试过 lambda 函数和翻转复制恶作剧,但似乎没有任何效果。有什么建议吗?

最佳答案

试试这个:

withFoldr :: [Int] -> String
withFoldr xs = foldr go "+" xs
where go x b = ('+' : replicate x '-') ++ b

一般来说,当你有一个表达式时

f as = foldr go a bs

那么a等于f[]go 函数具有签名 go::a -> b -> b对应于 printLine 的递归情况:

-- match up with go :: a -> b -> b
printLine (x:xs) = '+' : replicate x '-' ++ printLine xs

这里我们将 ax 识别,将 bprintLine xs 识别,所以 go 变为:

go a b = ('+' : replicate a '-') ++ b

关于Haskell - 合并文件夹和复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881268/

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