我试图用这种方式创建一些使用(实验)宏的例子:
use experimental :macros;
macro cards_vars() {
(<hearts clubs diamonds spades> X~ 1..10).map: { "my \$$^x = False;" }
};
cards_vars();
say $hearts1;
Run Code Online (Sandbox Code Playgroud)
这将创建并运行宏,然后检查是否存在已定义的变量之一.但我得到这个错误:
Too few positionals passed; expected 3 arguments but got 2
Run Code Online (Sandbox Code Playgroud)
我甚至不知道那个错误来自哪里.我认为它在cards_vars()中,但我不知道是否是这种情况.声明没有括号的宏会产生相同的错误.
我正在从Perl5学习Perl6.
为了进行编译,我将发布整个程序:
sub lgamma ( Num(Real) \n --> Num ){
use NativeCall;
sub lgamma (num64 --> num64) is native {}
lgamma( n )
}
sub pvalue (@a, @b) {
if @a.elems <= 1 {
return 1.0;
}
if @b.elems <= 1 {
return 1.0;
}
my Rat $mean1 = @a.sum / @a.elems;
my Rat $mean2 = @b.sum / @b.elems;
if $mean1 == $mean2 {
return 1.0;
}
my Rat $variance1 = 0.0;
my Rat $variance2 = 0.0;
for @a -> …Run Code Online (Sandbox Code Playgroud)