小编lis*_*tor的帖子

perl6语法,不确定示例中的某些语法

我还在学习perl6,我正在阅读这个页面上的语法示例:http://examples.perl6.org/categories/parsers/SimpleStrings.html ; 我已多次阅读有关正则表达式的文档,但仍有一些我不理解的语法; 任何人都可以开导我吗?非常感谢你 !!!

token string { <quote> {} <quotebody($<quote>)> $<quote> }
Run Code Online (Sandbox Code Playgroud)

问题1:令牌中的这个"{}"是做什么的?捕获标记为<()>,嵌套结构为tilda'('〜')'; 但是什么是{}?

token quotebody($quote) { ( <escaped($quote)> | <!before $quote> . )* }
Run Code Online (Sandbox Code Playgroud)

问题2a:在<>中转义($ quote)将是一个正则表达式函数,对吗?它需要$ quote作为参数并返回另一个正则表达式?

问题2b:如果我想表示"引用前没有的字符",我应该使用".$!before $ quote>"而不是"<!before $ quote>".??

token escaped($quote) { '\\' ( $quote | '\\' ) } # I think this is a function;
Run Code Online (Sandbox Code Playgroud)

非常感谢你 !!!

lisprog

regex grammar perl6 raku

16
推荐指数
2
解决办法
316
查看次数

`@ $ array`和其他结构的含义

我还在学习Perl 6.请原谅我的无知.我正在阅读Operators页面,我在表的开头发现了一些不熟悉的结构:

A   Level   Examples
N   Terms   42 3.14 "eek" qq["foo"] $x :!verbose @$array
Run Code Online (Sandbox Code Playgroud)

我重新读取类Array和类Scalar但我无法@$xyz在这些部分中找到构造.做什么:!@$意味着什么?有没有一个方便的地方收集和解释所有这些象征性的结构?

非常感谢你 !!

arrays scalar perl6 raku

10
推荐指数
1
解决办法
158
查看次数

简单的方法来映射顺序列表元素组

法线贴图将函数应用于列表元素,并生成结果列表的元素.例如,如果列表是(1, 2, 3,)并映射了square函数,则会得到一个新列表(1, 4, 9,).

有没有办法映射列表的一组顺序元素?例如,如果列表是<8 2 7 2 6 9 4 9 6 1>,我想计算列表中每2个元素的总和<10 9 9 8 15 13 13 15 7>

我当然可以写一个例程来遍历列表.但我正在寻找一种更简单的方法,如减少运算符或像聚集/采取.

mapping list perl6 sequential raku

10
推荐指数
2
解决办法
159
查看次数

在每个非字母数字字符之前放置转义符号

我试图在每个非字母数字字符之前放置一个转义符号:

 > my $b = "!@#%^||" ~ "/welcome xyz:!@#\$%^&*()|:;.,?/-."
!@#%^||/welcome xyz:!@#$%^&*()|:;.,?/-.

> my $c = $b.subst(/<:!L + :!N - [./-]>/, "\\" ~ $/, :g)
\ \ \ \ \ \ \ /welcome\ xyz\ \ \ \ \ \ \ \ \ \ \ \ \ \ .\ \ /-.
Run Code Online (Sandbox Code Playgroud)

这是第一次运行代码后的结果。第二次运行代码后,结果是一长串重复匹配。如果我使用“?”,会得到类似的结果 量词。

> my $c = $b.subst(/<:!L + :!N - [./-]>/, "\\" ~ $/, :g)
\! @ # % ^ | |   : ! @ # $ % ^ & * …
Run Code Online (Sandbox Code Playgroud)

escaping non-alphanumeric char raku

10
推荐指数
2
解决办法
388
查看次数

perl6排序数组的最佳方法是什么?

我需要对一组数组进行排序; .sort方法似乎默认工作.但是根据内部数组的不同索引排序的好方法是什么?

要排序的数组是更大的数组:('mmddyy'格式的生日)

my @allRecords = [ [birthday1 firstName1 lastName1 [data1]
                   [birthday2 firstName2 lastName2 [data2] 
                   ...
                   [birthdayN firstNameN lastNameN [dataN] ];

@allRecords.sort by itself sorts by birthdays. 
Run Code Online (Sandbox Code Playgroud)

什么是通过firstName或lastName或内部数组内的数据排序的更好方法?

非常感谢你!

arrays sorting perl6 indices raku

9
推荐指数
1
解决办法
108
查看次数

perl6正则表达式子规则和命名正则表达式比显式正则表达式慢很多; 如何使它们同样快速?

我有一个1608240行的数据文件.该文件是分段的.每个部分在开始行中都有一个唯一的单词,所有部分在该部分的最后一行中都有相同的单词"doneSection".

我试图通过执行以下操作来删除某些部分(由原始帖子中的@raiph重新格式化代码,以使代码更易于解释):

# using named subrules/regex is EXTREMELY slow;
# it reads about 2 lines per second, and grinds to halt
# after about 500 lines: (>> is the right word boundary)
perl6 -e 'my regex a { [ <{<iron copper carbon>.join("||")}> ] };
          my $x = 0;
          for "/tmp/DataRaw".IO.lines {
            $*ERR.print( "$x 1608240 \r" );
            ++$x;
            .say if m/:i beginSection \s+ <a> >>/ or
                    (m/:i \s+ <a> \s+ /
                     ff
                     m/:i doneSection/);
          }'

# however, if I …
Run Code Online (Sandbox Code Playgroud)

regex performance perl6

9
推荐指数
1
解决办法
218
查看次数

perl6什么是取消选择数组或列表元素的快速方法?

要在perl6中从数组中选择多个元素,这很容易:只需使用索引列表即可:

> my @a = < a b c d e f g >;
> @a[ 1,3,5 ]
(b d f)
Run Code Online (Sandbox Code Playgroud)

但是要取消选择这些元素,我必须使用Set:

> say @a[ (@a.keys.Set (-) (1,3,5)).keys.sort ]
(a c e g)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更简单的方法,因为我使用的数组通常很大?

arrays set perl6 deselect raku

9
推荐指数
3
解决办法
160
查看次数

perl6 set opertions中用户定义的比较函数

Perl6文档表明,当比较一组中的两个项目时,===使用.这是来自perl6文档的引用:

允许任何类型的对象/值作为设置元素.在集合中,每个元素都保证是唯一的(在某种意义上,没有两个元素会与===运算符进行正比较)

我想知道是否可以使用用户定义的函数而不是===?例如,我如何使用~~而不是===确定集合中的2个元素是否"相等".

我试图解决的问题是:集合A有一些名字和一些姓氏,但是所有的小写和没有标点符号,而集合B有许多名字和姓氏以任何顺序混合,并且那里可能是名称附带的标点符号,可能是大写或小写.我想知道集合A中的人(表示为具有一个特定名字和姓氏的A的子集)是否出现在集合B中.在这种情况下,===由于集合B中的字母案例和标点符号,我无法使用.

如果我可以使用~~而不是===,那么问题就会简单得多,因为我只需要确定A的子集是否也是B的子集~~.这类似于我之前提到的"置换匹配"问题.

非常感谢你 !

comparison set elements perl6

8
推荐指数
1
解决办法
140
查看次数

perl6插值数组匹配AND,OR,NOT函数

我正在尝试重新执行我的程序以匹配所有,匹配任何匹配项目中的项目.关于Perl6的一些文档没有解释当前实现的行为(Rakudo 2018.04),我还有一些问题.

(1)关于正则表达式的文档说,将数组插入匹配正则表达式意味着"最长匹配"; 但是,这段代码似乎没有这样做:

> my $a="123 ab 4567 cde";
123 ab 4567 cde
> my @b=<23 b cd 567>;
[23 b cd 567]
> say (||@b).WHAT
(Slip)
> say $a ~~ m/ @b /
 ?23?    # <=== I expected the match to be "567" (@b[3] matching $a) which is longer than "23";
Run Code Online (Sandbox Code Playgroud)

(2)(|| @b)是Slip; 如何轻松地对数组中的所有元素进行OR或AND而不显式循环遍历数组?

> say $a ~~ m:g/ @b /
(?23? ?b? ?567? ?cd?)
> say $a ~~ m:g/ ||@b /
(?23? ?b? ?567? ?cd?)
> say …
Run Code Online (Sandbox Code Playgroud)

arrays interpolation match perl6

8
推荐指数
1
解决办法
131
查看次数

perl6用s ///同时替换?

有没有办法用s ///同时进行替换?例如,如果我有一个带有1s,2s,3s等数字的字符串,我想用"tom"代替1,用"mary"替换2,用"jane"代替3,等等?

my $a = "13231313231313231";
say $a ~~ s:g/1/tom/;
say $a ~~ s:g/2/mary/;
say $a ~~ s:g/3/jane/;
Run Code Online (Sandbox Code Playgroud)

有没有一个好方法一次完成所有3个步骤?

谢谢 !!!

lisprog

simultaneous substitution perl6

8
推荐指数
2
解决办法
190
查看次数