gpt4 book ai didi

Haskell 程序复制列表中的元素

转载 作者:行者123 更新时间:2023-12-03 13:18:26 25 4
gpt4 key购买 nike

我是 Haskell 的新手。
我正在尝试编写一个程序,该程序将列表作为输入复制列表中的每个元素 k 次,其中 k = 列表中元素的位置。

例如replic[5,6,7] 给出 [[5],[6,6],[7,7,7]]

另一个条件是解决方案必须使用 map 函数。

到目前为止,我编写的代码是:

replic [] = [] 
replic (x:xs) = map (replicate 2 ) [x] ++ replic xs

这将复制每个元素两次,因为复制具有输入参数 2

我需要的是 replicate 函数应该在连续调用中作为 1 ,2 ,3 输入。所以我需要一个计数器。我如何使用那里的计数器或做其他任何事情来给我元素的位置?

最佳答案

在 Satvik 上展开,表示法

[1..]

给你一个无限的数字列表。
zip associates 函数允许你将两个列表合并成一个元组列表
zip :: [a] -> [b] -> [(a,b)]

例如
> zip [1..] [5,6,7] 
[(1,5),(2,6),(3,7)]

此代码将列表中的每个值与其在列表中的位置相关联

现在
replicate :: Int -> a -> [a]

重复一个值任意次数。鉴于这两个组件,我们可以设计一个简单的函数
replic xs = map (\(a,b) -> replicate a b) (zip [1..] xs)

我会写 pointfree 作为
replic :: [a] -> [[a]]
replic = map (uncurry replicate) . zip [1..]

这正是你想要的
> replic [5,6,7]
[[5],[6,6],[7,7,7]]

关于Haskell 程序复制列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13151456/

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