gpt4 book ai didi

固定长度的 Haskell powerset 子列表

转载 作者:行者123 更新时间:2023-12-02 06:36:07 27 4
gpt4 key购买 nike

众所周知,列表的幂集:
{1,2,3,4} 是 {{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3 },{4},{1,4},{2,4},{1,2,4},{3,4},{1,3,4},{2,3,4},{1 ,2,3,4}}

我得到的那个问题的 haskell 代码是:


potencia [] = [[]]



potencia (a:bs) = potencia bs++ map (a:) (potencia bs)

现在,我如何获得相同长度的子列表列表?例如,上面的列表将生成下一个长度为 3 的子列表列表 = {{1,2,3},{1 ,2,4},{1,3,4}}

我是一名学生,抱歉我的英语不好,在此先感谢... XD

最佳答案

怎么样

sublists  _     0 = [[]]
sublists [] _ = []
sublists (x:xs) n = sublists xs n ++ map (x:) (sublists xs $ n - 1)

这与您的代码非常相似,但只有两个递减参数,即长度和列表。

此外,对于更高级的 Haskellers

powerset = flip runCont id . foldM step [[]]
where step xs x = cont $ \c -> c xs ++ c (map (x:) xs)

是一个幂集实现,没有使用延续的递归。对 sublists 函数执行相同的操作是一项有趣的挑战。

关于固定长度的 Haskell powerset 子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582663/

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