Arrays 在Perl 6中,如何将未格式化的数组重复传递给reduce?

Arrays 在Perl 6中,如何将未格式化的数组重复传递给reduce?,arrays,perl,raku,Arrays,Perl,Raku,我试图将一个xx重复数组传递给[X~]reduce函数,但发现数组变平了。我搜索了在线文档和堆栈溢出,但没有找到任何内容。不幸的是,我的Perl 6知识非常初级(尽管我对Perl 5非常熟悉) [X~](,)#11 12 21 22(我想要的) [X~](xx 2)#12(不是我想要的) [X~](xx 2).树#1 2 [X~](树xx 2)#12 查看.perl转储并没有给我多少启发: (<1 2>, <1 2>).perl # (("1", "2"), ("

我试图将一个xx重复数组传递给[X~]reduce函数,但发现数组变平了。我搜索了在线文档和堆栈溢出,但没有找到任何内容。不幸的是,我的Perl 6知识非常初级(尽管我对Perl 5非常熟悉)

[X~](,)#11 12 21 22(我想要的)
[X~](xx 2)#12(不是我想要的)
[X~](xx 2).树#1 2
[X~](树xx 2)#12
查看.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
(,).perl(((“1”,“2”),(“1”,“2”))
(xx 2).perl#((“1”,“2”),(“1”,“2”)).list
(xx 2).tree.perl#(“1”、“2”、“1”、“2”)。项

我使用的是rakudo-star-2014.12.1-parrot.msi。

假设您也希望您的代码与重复两次以上的数组一起工作,我提出的解决方法是

(<1 2> xx 2).tree.reduce({ @^a X~ @^b })
(xx 2).tree.reduce({@^a X~@^b})
请注意,扁平化行为和列表/地块区别1是已知的痛点

一项改善这种状况的计划已经存在了一段时间(cf),预计将在年底6.0发布之前出台

1您查看的所有三个表达式都有不同的类型:

(<1 2>, <1 2>).WHAT    # (Parcel)
(<1 2> xx 2).WHAT      # (List)
(<1 2> xx 2).tree.WHAT # (LoL)
(,)。什么(包裹)
(xx 2).什么(列表)
(xx 2)树。什么(LoL)

最后一个是列表。

你为什么选择Parrot而不是MoarVM?没有什么特别的原因。这是我的第一次安装,只是为了了解语言的味道。阅读更多关于MoarVM的内容,我了解到MoarVM后端是要使用的。
不是数组。@crmk_аааафааа:没错,它是一个单词列表(尽管实际上称之为数组;例如搜索)。我忘了Perl在列表上下文中没有表示任意事物的词。@Uriarfaty Whoops,我将修复它:-)。同样的行:
([1,2]xx 2).map:{^a X~@^b}
@raiph:
.map
一旦从
xx 2
示例推广到
xx 3
或更高版本,就会失败。应该是
say([1,2]xx3)。reduce:{^ax~@^b}
(<1 2>, <1 2>).WHAT    # (Parcel)
(<1 2> xx 2).WHAT      # (List)
(<1 2> xx 2).tree.WHAT # (LoL)