我选择在Perl 6中重新设计我的先前代码的一部分,在这种情况下,是棋盘。前两节课进展顺利(或者至少工作了,我知道的很少,我无法说出它们的正确性) ,但我坚持使用第三个。这是代码:
#!/home/hsmyers/rakudo741/bin/perl6
# board.p6 - Beginnings of a PGN toolset. And place to start learning
# Perl 6/Raku.
use v6d;
#!___________________________________________________________
constant $size = 4;
class Piece {
my Str @namesOfPieces[$size] = <
white-rook white-knight white-bishop white-queen
>;
my Str @abrevsOfPieces[$size] = <
R N B Q K B N R
>;
my Str @symbolsOfPieces[$size] = <
♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
>;
my Str @codeptsOfPieces[$size] = (
"\x2656", "\x2658", "\x2657", "\x2655",
);
has Str …Run Code Online (Sandbox Code Playgroud) 注意:我正在使用这是Rakudo Star版本2019.03.1在REPL上进行所有操作,这是在实现Perl 6.d的MoarVM版本2019.03上构建的Rakudo Star版本2019.03.1。
在euler项目#22中,有一个names.txt文件,类似于“ JERE”,“ HAI”,“ ELDEN”,“ DORSEY”,“ DARELL”,“ BRODERICK”,“ ALONSO”,...
当我读到它时,将其拆分和排序,即可得到我所期望的名称列表。
for '../names.txt'.IO.slurp.split(',').sort -> $name {
say $name;
}
Run Code Online (Sandbox Code Playgroud)
打印出来
...
"ZONIA"
"ZORA"
"ZORAIDA"
"ZULA"
"ZULEMA"
"ZULMA"
Run Code Online (Sandbox Code Playgroud)
现在,如果我添加 comb()
for '../names.txt'.IO.slurp.split(',').sort -> $name {
say $name.comb;
}
Run Code Online (Sandbox Code Playgroud)
我越来越
...
(" Z O N I A ")
(" Z O R A ")
(" Z O R A I D A ")
(" Z U L A ")
(" Z U L E M A ")
(" Z U …Run Code Online (Sandbox Code Playgroud) 我有这个C代码:
typedef struct {
double dat[2];
} gsl_complex;
gsl_complex gsl_poly_complex_eval(const double c[], const int len, const gsl_complex z);
Run Code Online (Sandbox Code Playgroud)
C函数返回整个结构,而不仅仅是指针,因此我不能将Raku声明写为:
sub gsl_poly_complex_eval(CArray[num64] $c, int32 $len, gsl_complex $z --> gsl_complex)
is native(LIB) is export { * }
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
视窗
使用 Raku/Perl6,如何使用 NativeCall 读取值
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\"EnableLUA"]
使用 RegQueryValueExW?
https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regqueryvalueexw
非常感谢,
-T
编辑 12-27-2019 #1:删除错误代码并插入新代码
这就是我得到的程度。
测试运行字符串:K:\Windows\NtUtil>perl6 -I。-e "使用 WinMount :GetLUA; 说 GetLUA();" RegOpenKeyExW RegOpenKeyExW RtnCode 0
RegQueryValueExW
1
2
RegQueryValueExW RtnCode 87 (87 = ERROR_INVALID_PARAMETER)
lpData pointer 0
lpcbData data length 0
RegCloseKey
RegCloseKey RtnCode 0
True
Run Code Online (Sandbox Code Playgroud)
WinMount.pm6
# unit module WinMount;
# WinMount.pm6#`{
Utilities to mount and dismound drive partitions
Note: LUA must be unset (0x00000000) for mount to function prpoperly
raku -I. -c WinMount.pm6
}
use NativeCall;
use …Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何在 Raku 中重写 NQP 的优先级解析器:
Precedence Parser 在这里实现:https : //github.com/Raku/nqp/blob/master/src/HLL/Grammar.nqp#L384 NQP 应该是 Raku 的一个子集,但语法部分似乎是专门的。
如果我想改写 Raku 中 EXPR() 中的 Precedence Parser,那么要使用的 Raku 语法原语是什么?即会cursor_start_cur()翻译成什么?有没有cursor在乐语法?如何设置posRaku Match 对象?会$termcur.MATCH()翻译成什么 等等...
我不是在寻找编写优先解析器的不同方法,而是想知道它是否可以像 NQP 那样在 Raku 中完成。
我有一个来自 Wild Wild Web 的文件,它包含格式错误的 UTF8。我在早期版本的 Raku 中处理了其他代码中格式错误的 UTF8。在 2020.10 版本中,我在下面遇到了这个问题。对 utf8-c8 的支持是否已更改(此页面说它应该可以工作,但似乎没有):
https://docs.raku.org/language/unicode#index-entry-UTF-8_Clean-8
这个页面有这个例子:
say slurp($test-file, enc => 'utf8-c8');
Run Code Online (Sandbox Code Playgroud)
现在我在命令行上的代码:
raku -e 'my $a = slurp("zlist"); for $a.lines { .say }'
Malformed UTF-8 near bytes 73 e2 5f at line 55 col 14
in block <unit> at -e line 1
Run Code Online (Sandbox Code Playgroud)
然后使用这个:
raku -e 'my $a = slurp("zlist", enc => 'utf8-c8'); for $a.lines { .say }'
===SORRY!=== Error while compiling -e
Undeclared routine:
utf8-c8 used at line 1
Run Code Online (Sandbox Code Playgroud)
我的代码很简单,基本上是从示例中复制的。我究竟做错了什么?
Raku mixin有两种(或更多)性质,在同一个容器中组合多个值,或者值与角色。但是,据我所知,没有一种直接的方法可以检查不是由您创建的变量中的“混合性”。
这可能是个伎俩
my $foo = 3 but Stringy;
say $foo.^name ~~ /\+/;# OUTPUT: «?+??»
Run Code Online (Sandbox Code Playgroud)
但是我还缺少其他任何可以直接查找的属性吗?
我想用 Raku 建立一个课程。这是我到目前为止所拥有的:
unit class Vimwiki::File;
has Str:D $.path is required where *.IO.e;
method size {
return $.file.IO.s;
}
Run Code Online (Sandbox Code Playgroud)
我想size通过简单地让我的类继承 IO::Path 的方法来摆脱该方法,但我对如何实现这一点有点不知所措。is IO::Path当我尝试创建新对象时尝试抛出错误:
$vwf = Vimwiki::File.new(path => 't/test_file.md');
Must specify a non-empty string as a path
in block <unit> at t/01-basic.rakutest line 24
Run Code Online (Sandbox Code Playgroud) 不将条件模块加载放在BEGIN块中有什么问题吗?如果没有BEGIN块,在预编译后更改环境变量仍然会影响加载哪个模块。
my $table;
#BEGIN {
if %*ENV<TABLE_A> {
require MY_TABLE_A <&get_table>;
$table = get_table();
}
else {
require MY_TABLE_B <&get_table>;
$table = get_width();
}
#}
Run Code Online (Sandbox Code Playgroud) 这段代码$string按照我想要的方式解析:
#! /usr/bin/env raku\n\nmy $string = q:to/END/;\naaa bbb # this has trailing spaces which I want to keep\n\n kjkjsdf\nkjkdsf\nEND\n\ngrammar Markdown {\n token TOP { ^ ([ <blank> | <text> ])+ $ }\n token blank { [ \\h* <.newline> ] }\n token text { <indent> <content> }\n token indent { \\h* }\n token newline { \\n }\n token content { \\N*? <trailing>* <.newline> } \n token trailing { \\h+ }\n}\n\nmy $match = Markdown.parse($string);\n$match.say;\nRun Code Online (Sandbox Code Playgroud)\n输出
\n\xef\xbd\xa2aaa bbb\n\n …Run Code Online (Sandbox Code Playgroud)