gpt4 book ai didi

list - Haskell 从给定的输入创建一个 n 元组

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

直截了本地说,我对 Haskell 还很陌生,并试图解决我遇到的问题(编程练习)。它说我应该创建一个函数

com :: Int -> [t] -> [[t]]

返回 n 个元素的所有可能选择,其中 n 和 list 分别是第一个和第二个参数。元素可以以不同的顺序重新拾取。结果会是这样的:

com 2 [1,2,3] = [[1,1], [1,2]..[3,3]]

对于 n = 1 和 n = 2 的情况,我设法解决了这些情况。 n = 1 的情况非常简单,对于 n = 2 的情况,我将使用连接并构建它。但是,我不明白如何将其制成 n 元并为所有 n 工作。就像突然一个函数调用就像 com 10 ...

最佳答案

这是你想要的吗?

> sequence (replicate 3 "abc")
["aaa","aab","aac","aba","abb","abc","aca","acb","acc"
,"baa","bab","bac","bba","bbb","bbc","bca","bcb","bcc"
,"caa","cab","cac","cba","cbb","cbc","cca","ccb","ccc"]

上面利用了 sequence 在 list monad 中构建列表列表的笛卡尔积的事实。因此,我们可以简单地将列表复制 n 次,然后取出产品。

(注意上面的"abc"是字符列表['a','b','c']的简写)

所以,一个解决方案可能是

com n xs = sequence (replicate n xs)

或者等效地,正如丹尼尔瓦格纳在下面指出的那样,

com = replicateM

最后一点:我确实意识到这对于实际学习如何编程可能不是很有帮助。事实上,我从解决任务的库中提取了两个“魔术”函数。尽管如此,它仍然展示了如何将问题简化为两个子问题:1) 复制值 n 次和 2) 构建笛卡尔积。如果您不想使用该库,第二个任务本身就是一个很好的练习。您可能希望从以下开始解决这个问题:

sequence :: [[a]] -> [[a]]
sequence [] = [[]]
sequence (x:xs) = ...
where ys = sequence xs

关于list - Haskell 从给定的输入创建一个 n 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28528420/

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