我正在尝试在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,elem和null(也没有模式匹配).所以我的问题是:有没有更好的解决方案,我只有一个函数,myreverse,只消耗一个列表?(当然,这符合上述要求)
谢谢!
您可以尝试使用foldl如下方式反转列表:
reverse' :: [a] -> [a]
reverse' = foldl (\acc x -> x : acc) []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5721 次 |
| 最近记录: |