Erlang List对笛卡尔积的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Erlang List对笛卡尔积的理解相关的知识,希望对你有一定的参考价值。

我正在学习Erlang并且遇到过/试图理解列表理解。我发现你可以很容易地使用笛卡尔产品。

基本上我虽然是一副纸牌,如果你将唯一值乘以套装数量,你将得到每一种可能的组合 - 创造一整套牌。但是,如果我希望将2个笑话添加到套牌中,那么该怎么办 - 但是笑话者不属于诉讼。我们如何解决这个问题?

下面的代码是我到目前为止,并将输出可能的组合,没有笑话。

CardValues = [ace, king, queen, jack, 10, 9, 8, 7, 6, 5, 4, 3, 2],
CardSuits =  [spades,hearts,clubs,diamonds],
CartesianList = [{X, Y} || X <- CardValues, Y <- CardSuits ],
io:format("
CartesianList:~p
",[CartesianList]).

是否有更好的实现方式/如何实现这一目标?我希望笑话的输出会像{joker,nosuit}谢谢,Snelly。

答案

如果你真的想直接从列表理解中获取它,你可以使用过滤器:

CardValues = [joker,joker,ace, king, queen, jack, 10, 9, 8, 7, 6, 5, 4, 3, 2],
CardSuits =  [spades,hearts,clubs,diamonds,nosuit],
CartesianList = [{X, Y} || X <- CardValues, Y <- CardSuits, ((X == joker)andalso(Y==nosuit))orelse((X =/= joker)andalso(Y=/=nosuit)) ],
io:format("
CartesianList:~p
",[CartesianList]).

但它真的很奇怪,人为和低效,我会手动添加它们:

CardValues = [ace, king, queen, jack, 10, 9, 8, 7, 6, 5, 4, 3, 2],
CardSuits =  [spades,hearts,clubs,diamonds],
CartesianList = [{joker,nosuit},{joker,nosuit}|[{X, Y} || X <- CardValues, Y <- CardSuits ]]],
io:format("
CartesianList:~p
",[CartesianList]).

以上是关于Erlang List对笛卡尔积的理解的主要内容,如果未能解决你的问题,请参考以下文章

笛卡儿积的java实现

python中带有元组列表的字符串列表的条件笛卡尔积的单线

生成笛卡尔积的两个表之间的连接

导致笛卡尔积的 Django 注释

笛卡尔积的两个向量?

javascript 用于从2D矩阵创建笛卡尔积的递归函数