我想折叠成(++) :: [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