gpt4 book ai didi

list - Haskell 将元组列表映射到元组列表

转载 作者:行者123 更新时间:2023-12-02 21:05:00 26 4
gpt4 key购买 nike

我试图将一个元组列表映射到另一个元组列表中,但没有成功。

输入示例:

a = [("eo","th"),("or","he")]

示例输出:

[('e','t'),('o','h'),('o','h'),('r','e')]

我已经尝试过:

map (\(a,b) -> (a!!0,b!!0):(a!!1,b!!1):[]) a

但它会产生:

[[('e','t'),('o','h')],[('o','h'),('r','e')]]

最佳答案

您必须对结果使用 concat 或使用 concatMap 而不是 map。毕竟,您在 map 中返回列表,因此获得列表列表。


让我们为您的函数指定一个名称和类型:

magic :: [([Char], [Char])] -> [(Char, Char)]

现在,我们可以将其视为一个两步过程:从原始列表中的每一对中,我们将获得一个列表:

magicPair :: ([Char], [Char]) -> [(Char, Char)]
magicPair (a,b) = zip a b

现在我们需要将 magicPair 映射到原始列表中的所有元素并连接结果:

magic xs = concat (map magicPair xs)

组合 concat 。 map f 非常常见,因此有一个名为 concatMap 的函数:

magic xs = concatMap magicPair xs

在一对参数上使用函数 f 而不是两个参数也很常见,因此 magicPair = uncurry zip:

magic xs = concatMap (uncurry zip) xs

我们现在可以删除两侧的 xs,最终得到 magic 的最终变体:

magic = concatMap (uncurry zip)

关于list - Haskell 将元组列表映射到元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36531737/

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