我还在学习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
我还在学习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在这些部分中找到构造.做什么:!和@$意味着什么?有没有一个方便的地方收集和解释所有这些象征性的结构?
非常感谢你 !!
法线贴图将函数应用于列表元素,并生成结果列表的元素.例如,如果列表是(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>?
我当然可以写一个例程来遍历列表.但我正在寻找一种更简单的方法,如减少运算符或像聚集/采取.
我试图在每个非字母数字字符之前放置一个转义符号:
> 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) 我需要对一组数组进行排序; .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或内部数组内的数据排序的更好方法?
非常感谢你!
我有一个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) 要在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)
我想知道是否有更简单的方法,因为我使用的数组通常很大?
Perl6文档表明,当比较一组中的两个项目时,===使用.这是来自perl6文档的引用:
允许任何类型的对象/值作为设置元素.在集合中,每个元素都保证是唯一的(在某种意义上,没有两个元素会与
===运算符进行正比较)
我想知道是否可以使用用户定义的函数而不是===?例如,我如何使用~~而不是===确定集合中的2个元素是否"相等".
我试图解决的问题是:集合A有一些名字和一些姓氏,但是所有的小写和没有标点符号,而集合B有许多名字和姓氏以任何顺序混合,并且那里可能是名称附带的标点符号,可能是大写或小写.我想知道集合A中的人(表示为具有一个特定名字和姓氏的A的子集)是否出现在集合B中.在这种情况下,===由于集合B中的字母案例和标点符号,我无法使用.
如果我可以使用~~而不是===,那么问题就会简单得多,因为我只需要确定A的子集是否也是B的子集~~.这类似于我之前提到的"置换匹配"问题.
非常感谢你 !
我正在尝试重新执行我的程序以匹配所有,匹配任何匹配项目中的项目.关于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) 有没有办法用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
perl6 ×9
raku ×6
arrays ×4
regex ×2
set ×2
char ×1
comparison ×1
deselect ×1
elements ×1
escaping ×1
grammar ×1
indices ×1
list ×1
mapping ×1
match ×1
performance ×1
scalar ×1
sequential ×1
simultaneous ×1
sorting ×1
substitution ×1