在 Perl 6 中,如何将未展开的数组重复传递给 reduce?
How do I pass an unflattened array repetition to a reduce in Perl 6?
我正在尝试将 xx 重复数组传递给 [X~] reduce 函数,但发现该数组变平了。我搜索了在线文档和堆栈溢出,但找不到任何东西。不幸的是,我的 Perl 6 知识非常初级(尽管我对 Perl 5 非常了解)。
[X~](<1 2>, <1 2>) # 11 12 21 22 (WHAT I WANT)
[X~](<1 2> xx 2) # 1 2 1 2 (NOT WHAT I WANT)
[X~](<1 2> xx 2).tree # 1 2 1 2
[X~](<1 2>.tree xx 2) # 1 2 1 2
查看 .perl 转储并没有给我太多启发:
(<1 2>, <1 2>).perl # (("1", "2"), ("1", "2"))
(<1 2> xx 2).perl # (("1", "2"), ("1", "2")).list
(<1 2> xx 2).tree.perl # ("1", "2"; "1", "2").item
我正在使用 rakudo-star-2014.12.1-parrot.msi。
假设您还希望您的代码处理重复两次以上的数组,我想出的解决方法是
(<1 2> xx 2).tree.reduce({ @^a X~ @^b })
请注意,扁平化行为和 List/Parcel 区别1 是已知的痛点。
改善情况的计划已经有一段时间了(cf Great List Refactor),预计会在年底 6.0 发布之前落地。
1 你看到的三个表达式都有不同的类型:
(<1 2>, <1 2>).WHAT # (Parcel)
(<1 2> xx 2).WHAT # (List)
(<1 2> xx 2).tree.WHAT # (LoL)
最后一个是列表列表。
我正在尝试将 xx 重复数组传递给 [X~] reduce 函数,但发现该数组变平了。我搜索了在线文档和堆栈溢出,但找不到任何东西。不幸的是,我的 Perl 6 知识非常初级(尽管我对 Perl 5 非常了解)。
[X~](<1 2>, <1 2>) # 11 12 21 22 (WHAT I WANT)
[X~](<1 2> xx 2) # 1 2 1 2 (NOT WHAT I WANT)
[X~](<1 2> xx 2).tree # 1 2 1 2
[X~](<1 2>.tree xx 2) # 1 2 1 2
查看 .perl 转储并没有给我太多启发:
(<1 2>, <1 2>).perl # (("1", "2"), ("1", "2"))
(<1 2> xx 2).perl # (("1", "2"), ("1", "2")).list
(<1 2> xx 2).tree.perl # ("1", "2"; "1", "2").item
我正在使用 rakudo-star-2014.12.1-parrot.msi。
假设您还希望您的代码处理重复两次以上的数组,我想出的解决方法是
(<1 2> xx 2).tree.reduce({ @^a X~ @^b })
请注意,扁平化行为和 List/Parcel 区别1 是已知的痛点。
改善情况的计划已经有一段时间了(cf Great List Refactor),预计会在年底 6.0 发布之前落地。
1 你看到的三个表达式都有不同的类型:
(<1 2>, <1 2>).WHAT # (Parcel)
(<1 2> xx 2).WHAT # (List)
(<1 2> xx 2).tree.WHAT # (LoL)
最后一个是列表列表。