gpt4 book ai didi

haskell - 在 Haskell 中使用 foldl 或 foldr 的映射函数

转载 作者:行者123 更新时间:2023-12-05 01:46:45 26 4
gpt4 key购买 nike

我正在编写一个函数 my_map,它接受一个一元函数和一个列表,并返回通过将函数映射到输入列表的所有元素而得到的列表。

Main> my_map (^3) [1..5]

[1,8,27,64,125]

我试过这样的:

my_map :: (a -> b) -> [a] -> [b]
my_map f [] = []
my_map f (x:xs) = foldr (\x xs -> (f x):xs) [] xs

但是在上面运行之后,我只得到了[8,27,64,125]。第一个数字 1 未显示在输出中。

谁能帮帮我?

最佳答案

您在参数中使用 (x:xs) 模式,但是当您应用折叠时,您仅将其应用于 xs 部分,这意味着您的第一个元素,即 x 代表的元素永远不会被处理。您需要将其更改为:

my_map :: (a -> b) -> [a] -> [b]
my_map f xs = foldr (\y ys -> (f y):ys) [] xs

因为您使用的是 foldr,所以您不需要明确处理空列表的情况。此外,您不需要以 (x:xs) 格式指定列表。

最后,我自己的偏好是避免对函数输入和函数定义中的任何辅助函数或表达式使用相同的名称。这就是为什么我使用 xs 作为输入列表和 yys 用于传递给 lambda 的参数。

关于haskell - 在 Haskell 中使用 foldl 或 foldr 的映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831602/

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