gpt4 book ai didi

haskell - 反转haskell中的列表

转载 作者:行者123 更新时间:2023-12-03 15:27:54 26 4
gpt4 key购买 nike

我正在尝试反转列表。

以下是我的代码:

reverseList :: [Int] -> [Int]
reverseList [] = []
reverseList (x:xs) = x:reverseList xs

最终发生的事情是我最终以相同的顺序返回列表。我什至有一个如何反转列表的解决方案,但我想了解我在这里做错了什么?我对haskell很陌生,所以我认为我应该更多地专注于理解,然后我才能轻松解决更多问题。我知道这个问题有很多解决方案,但我需要更多帮助来理解尤其是我在这段代码中做错了什么。

最佳答案

在 Haskell 中有几种方法可以解决这个问题。天真的方法是使用连接函数 ++ :

reverseList [] = []
reverseList (x:xs) = reverseList xs ++ [x]

然而,这对于大型列表来说真的很慢,因为 Haskell 列表确实是单链表,所以为了追加一个元素,你必须遍历整个列表。另一种方法是跟上您在辅助函数中构建的列表:
reverseList = go []
where
go acc [] = acc
go acc (x:xs) = go (x:acc) xs

但是,这实际上只是 fold图案:
reverseList = foldl (\acc x -> x : acc) []

但是 \acc x -> x : acc只是 flip (:) , 所以这可以写成
reverseList = foldl (flip (:)) []

但是,最简单的方法可能是只使用 reverse Prelude 中的功能。

我想指出您的 reverseList :: [Int] -> [Int] 类型可以推广到 :: [a] -> [a] ,你没有对列表的元素做任何特别的事情,你只是用它们建立一个新的列表。

关于haskell - 反转haskell中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26847192/

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