我想折叠成(++) :: [a] -> [a] -> [a]
我做的:

plusplus :: [a]->[a]->[a]
plusplus l = foldr (\x l1 -> x:l1) l


但是我得到反向器命令。例如:

plusplus [1,2,3] [4,5,6]
Output: [4,5,6,1,2,3]


我知道为什么得到这个,但是我仍然不知道如何解决这个问题。

编辑:我发布了错误的解决方案,对不起。

最佳答案

您要执行的操作使用了错误的fold

看看wiki haskell's page on foldr, foldl, and foldl'

foldr将第一个参数放在末尾(认为在“右边”)
foldl在逻辑上将第一个参数放在开头(认为在“左侧”)

当您想到这样的不同折痕时,它们的名称会变得更加清晰。它只是向右折和向左折!

因此要正确使用订单:

plusplus :: [a]->[a]->[a]
plusplus l = foldl (\x l1 -> x:l1) l

09-12 10:52