递归地反转字符串(或列表)

Sad*_*diq 0 haskell

我正在尝试在haskell中编写一个函数来递归地反转列表.我写了一个辅助函数,它接受原始列表和一个空列表,然后以LIFO模式将元素从第一个传递到另一个.

这就是我所拥有的:

myreverse :: [a] -> [a]
myreverse list = myflip list []

myflip :: [a] -> [a] -> [a]
myflip list1 newList
    | null list1        = newList
    | otherwise         = myflip (tail list1) ((head list1) : newList)
Run Code Online (Sandbox Code Playgroud)

我知道有一个内置函数为我做,但要求是我只使用head,tail,elemnull(也没有模式匹配).所以我的问题是:有没有更好的解决方案,我只有一个函数,myreverse,只消耗一个列表?(当然,这符合上述要求)

谢谢!

Der*_*wok 7

您可以尝试使用foldl如下方式反转列表:

reverse' :: [a] -> [a]  
reverse' = foldl (\acc x -> x : acc) [] 
Run Code Online (Sandbox Code Playgroud)

  • 或者稍微有点发展的`foldl(flip(:))[]` (8认同)