gpt4 book ai didi

haskell - Haskell 中的映射函数基础

转载 作者:行者123 更新时间:2023-12-03 09:37:39 24 4
gpt4 key购买 nike

我正在自学 Haskell,但遇到了 map 的问题。功能,正在寻求帮助。我想要做的是获取一个列表列表,如果列表为空,则 []其他列表之一有 1在头部。然后拿那个1并将其放入 []列表。

a = [[2,1,3,1],[],[2,3],[1,2,3],[4]]

并使它
a = [[2,1,3,1],[1],[2,3],[2,3],[4]]

到目前为止,我有一些东西,我还没有得到完整的东西。
((map (\k-> if ([])&&(elem 1 heads))a) 
where heads = map head a

但我也必须拥有它,如果 a = [[1,2,1,3,1],[],[2,3],[1,2,3],[4]]会给 a = [[2,1,3,1],[1],[2,3],[1,2,3],[4]]所以它只移动一个 1到空列表。

我知道这行不通,但我已经尝试了几个小时,但我一无所获

最佳答案

在这里,我尝试编写易于理解的功能解决方案
初学者。当然,这可以更有效地实现。

doStuff :: Integral a => [[a]] -> [[a]]
doStuff xs = let n = min holes donors in go n n xs
where go _ _ [] = []
go 0 m ([]:ys) = [] : go 0 m ys
go n m ([]:ys) = [1] : go (n - 1) m ys
go n 0 ((1:zs):ys) = (1:zs) : go n 0 ys
go n m ((1:zs):ys) = zs : go n (m - 1) ys
go n m (y:ys) = y : go n m ys
holes = count null xs
donors = count goodish xs
count f = length . filter f
goodish (1:_) = True
goodish _ = False

它甚至有效:

λ> doStuff [[2,1,3,1],[],[2,3],[1,2,3],[4]]
[[2,1,3,1],[1],[2,3],[2,3],[4]]
λ> doStuff [[1,2,1,3,1],[],[2,3],[1,2,3],[4]]
[[2,1,3,1],[1],[2,3],[1,2,3],[4]]
λ> doStuff [[1,2,1,3,1],[],[2,3],[1,2,3],[4],[],[]]
[[2,1,3,1],[1],[2,3],[2,3],[4],[1],[]]

关于haskell - Haskell 中的映射函数基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206422/

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