gpt4 book ai didi

haskell - 所有可能的子列表成对 haskell

转载 作者:行者123 更新时间:2023-12-04 22:50:54 24 4
gpt4 key购买 nike

有点不确定如何正确表达,所以请耐心等待!

给定一个列表 [1,2,3,4] 我想要一个列表元组列表,如下所示: [([1],[2,3,4]),([1,2],[3,4 ]),([1,2,3],[4])]。

问题的 B 部分也是在子列表中获得所有可能的排序。所以在第一个元组的情况下,我想要 2 3 4 按 243、324、432、423 的顺序...

是的,我喜欢不确定性。

最佳答案

import Data.List (inits, tails, permutations)
import Control.Arrow (first, second)

parta :: [a] -> [([a], [a])]
parta [] = []
parta xs = init . tail $ zip (inits xs) (tails xs)

对于 b 部分,我不确定您是否想要 [([1],[2,3,4]), ([1],[3,4,2]), ...][([1],[[2,3,4],[3,4,2],...]), ...] .如果是后者,那么
partb :: [a] -> [([a], [[a]])]
partb = map (second permutations) . parta

编辑:哦,但你想要前者。在这种情况下
partb :: [a] -> [([a], [a])]
partb = map (uncurry zip . first repeat . second permutations) . parta

最终编辑:因为我已经使用了 Control.Arrow 的几个函数,所以我会注意到 zip (inits xs) (tails xs)也可以写成 (inits &&& tails) xs ,但我不确定那样更清楚。

关于haskell - 所有可能的子列表成对 haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5920575/

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