我正在尝试将针对背包问题的基于正则表达式的解决方案从Perl转换为raku。Perlmonks的详细资料
Perl解决方案创建此正则表达式:
(?<P>(?:vvvvvvvvvv)?)
(?<B>(?:vv)?)
(?<Y>(?:vvvv)?)
(?<G>(?:vv)?)
(?<R>(?:v)?)
0
(?=
(?(?{ $1 })wwww|)
(?(?{ $2 })w|)
(?(?{ $3 })wwwwwwwwwwww|)
(?(?{ $4 })ww|)
(?(?{ $5 })w|)
)
Run Code Online (Sandbox Code Playgroud)
与匹配vvvvvvvvvvvvvvvvvvv0wwwwwwwwwwwwwww。之后,匹配哈希%+包含要放入麻袋中的物品。
我的raku转换是:
$<B> = [ [ vv ]? ]
$<P> = [ [ vvvvvvvvvv ]? ]
$<R> = [ [ v ]? ]
$<Y> = [ [ vvvv ]? ]
$<G> = [ [ vv ]? ]
0
<?before
[ { say "B"; say $/<B>; say $0; say …Run Code Online (Sandbox Code Playgroud) 如何操作包含结构化数据的两个集合。
例如
set(set(<a b c>), set(<d e f>)) ? set(set(<a b c>), set(<d e f>), set(<g h i>))#True
set(set(<a b c>), set(<d e f>)) eq set(set(<a b c>), set(<d e f>), set(<g h i>))#false
set(set(<a b c>), set(<d e f>)) ? set(set(<a b c>), set(<d e f>), set(<g h i>))#set(<a b c>), set(<d e f>))
Run Code Online (Sandbox Code Playgroud) 这是对Baggy add (+) work on MixHash weights的(有点迟到的)跟进吗?. MixHash 是一个很好的单位比较工具 - 因为我知道我的 dmix => ("m"=>2,"kg"=>1,"s"=>-2).MixHash 对于 'kg m2 per s2' 和 'kg.m^2/s^2' 等等。
这是我寻求的三重清晰度:
让我知道我是否可以提供代码或应该提交错误报告...
我在 Raku 中有出色的代码:
#!/usr/bin/env perl6
CONTROL {
when CX::Warn {
note $_;
die
}
}
use fatal;
role KeyRequired {
method AT-KEY (\key) {
die "Key {key} not found" unless self.EXISTS-KEY(key);
nextsame
}
}
sub execute ($cmd) {
put $cmd;
my $proc = shell $cmd, :err, :out;
if $proc.exitcode != 0 {
put 'exit code = ' ~ $proc.exitcode;
put 'stderr ' ~ $proc.err.slurp;
put 'stdout ' ~ $proc.out.slurp;
die
}
}
execute "ls *.p6"
Run Code Online (Sandbox Code Playgroud)
我说“优秀”是因为 Raku 版本运行命令,返回退出代码,并在需要时打印 stdout/stderr,并且所有这些都以易于阅读和易于理解的方式进行。
通读 …
我从 /path/to/data 运行 /home/foo/bar.p6 并显示“分段错误(核心转储)”
我在 /var/crash 或我的主目录或当前工作目录中找不到核心转储文件。
我认为是 Raku 本身进行了核心倾销。
如果我的程序导致转储,raku 会将核心转储文件放在哪里,如果 Raku 本身进行了核心转储,我会在哪里找到转储文件?
谢谢。
在 Linux(可能也在 Windows/OSX)中,如果我们打开一个文件进行写入并在写入时重命名它,raku 进程会顺利进行并继续写入文件。
但是我们如何在重命名发生时找到文件的新名称(路径)?
IO::Notification不是要走的路,因为它不提供其他信息,而只提供一般描述:
FileRenamed or FileChanged
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我有点惊讶地发现下面的代码
\n# comment \xe2\x80\xa9say 1;\n# comment \xe2\x80\xa8say 2;\n# comment say 3;\n# comment say 4;\nRun Code Online (Sandbox Code Playgroud)\n打印1、2、3和4。
以下是“#comment”后的相关字符:
\nsay "\xe2\x80\xa9\xe2\x80\xa8".uninames.raku;\n# OUTPUT: \xc2\xab("PARAGRAPH SEPARATOR", "LINE SEPARATOR", "<control-000B>", "<control-000C>").Seq\xc2\xbb\nRun Code Online (Sandbox Code Playgroud)\n请注意,许多/所有这些字符在大多数字体中都是不可见的。至少对于我的编辑器来说,没有一个会导致以下文本打印在新行上。至少有一个(<control-000C>,又名Form Feed,有时打印为^L)在 Vim/Emacs 中相当广泛地用作节分隔符。
这提出了几个问题:
\n(我意识到#4 在技术上不是一个问题,但我觉得有必要说一下)。
\nRaku 是渐进式打字语言。所以下面的代码:
my %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
Run Code Online (Sandbox Code Playgroud)
是相同的:
my Hash %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
Run Code Online (Sandbox Code Playgroud)
但是,它报告一个错误:
Type check failed in assignment to %hash; expected Hash but got Rat (4.5)
Run Code Online (Sandbox Code Playgroud)
为什么在使用粗箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?
#!perl6
use v6;
my $message = "\nHello!\n\nSleep\nTest\n\n";
my @a = $message.split( '' );
for @a {
sleep 0.3;
.print;
}
Run Code Online (Sandbox Code Playgroud)
Perl6默认启用"autoflush".使用perl5而不启用"outflush"我不会得到这种行为.
https://github.com/yeahnoob/perl6-perf中的代码托管,如下所示:
use v6;
my $file=open "wordpairs.txt", :r;
my %dict;
my $line;
repeat {
$line=$file.get;
my ($p1,$p2)=$line.split(' ');
if ?%dict{$p1} {
%dict{$p1} = "{%dict{$p1}} {$p2}".words;
} else {
%dict{$p1} = $p2;
}
} while !$file.eof;
Run Code Online (Sandbox Code Playgroud)
当“ wordpairs.txt”较小时,运行良好。
但是,当“ wordpairs.txt”文件约为140,000行(每行,两个单词)时,它运行的非常慢。即使运行20秒,它也无法完成。
有什么问题吗?代码中是否有错误?感谢任何人的帮助!
代码(目前为2014-09-04):
my %dict;
grammar WordPairs {
token word-pair { (\S*) ' ' (\S*) "\n" }
token TOP { <word-pair>* }
}
class WordPairsActions {
method word-pair($/) { %dict{$0}.push($1) }
}
my $match = WordPairs.parse(slurp, :actions(WordPairsActions)); …Run Code Online (Sandbox Code Playgroud)