gpt4 book ai didi

Haskell:笛卡尔积

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

Possible Duplicate:
Cartesian product

我是 Haskell 新手,我有一个问题。我想做一些函数,它将获取列表的第一个元素并连接到第二个列表的所有元素,然后从第一个列表中获取第二个元素并执行相同的操作。例如我想采取:[[1]、[2]、[3]) 和 [[4]、[5]、[6]]并获取输出

[([1],[4]),([1],[5]),([1],[6]),
([2],[4]),([2],[5]),([2],[6]),
([3],[4]),([3],[5]),([3],[6])]

我发现的关闭的是转置

transpose [[1,2,3],[4,5,6]]
[[1,4],[2,5],[3,6]]

如果有任何帮助,我将不胜感激。

编辑:我真丢脸。我找到了解决方案

[[x,y] | x <- [[1],[2],[3]], y <- [[4],[5],[6]]]

结果是:

[[[1],[4]],[[1],[5]],[[1],[6]],[[2],[4]],[[2],[5]],[[2],[6]],[[3],[4]],[[3],[5]],[[3],[6]]]

最佳答案

import Control.Applicative

(,) <$> [[1],[2],[3]] <*> [[4],[5],[6]]

--[([1],[4]),([1],[5]),([1],[6]),([2],[4]),([2],[5]),([2],[6]),([3],[4]),([3],[5]),([3],[6])]

参见http://learnyouahaskell.com/functors-applicative-functors-and-monoids#applicative-functors以获得解释。

您还可以使用 do-Notation,因为列表不仅是 Applicative,也是 Monad:

do x<-[[1],[2],[3]]; y<-[[4],[5],[6]]; return (x,y)

--[([1],[4]),([1],[5]),([1],[6]),([2],[4]),([2],[5]),([2],[6]),([3],[4]),([3],[5]),([3],[6])]

关于Haskell:笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402374/

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