我如何将未展平的数组重复传递给Perl 6中的reduce?

问题描述 投票:4回答:1

我正在尝试将重复的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。

arrays perl perl6 raku
1个回答
4
投票

假设您还希望代码对数组重复两次以上,那么我想出的解决方法就是读取

(<1 2> xx 2).tree.reduce({ @^a X~ @^b })

请注意,展平行为和List / Parcel区别1是已知的痛点。

改善这种情况的计划已经存在了一段时间(请参阅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)

最后一个是列表列表。

© www.soinside.com 2019 - 2024. All rights reserved.