use*_*164 11 constants declaration initializer perl6 raku
我正在尝试在Perl6中编写一些逻辑语句.
我做了逻辑运算符:
multi sub prefix:<¬> ($n) {
return not $n;
}
multi sub infix:<?> ($n, $b) {
return ($n and $b);
}
multi sub infix:<?> ($n, $b) {
return ($n or $b);
}
multi sub infix:<?> ($n, $b) {
if $n == True and $b == True {
return True;
} elsif $n == True and $b == False {
return False;
} elsif $n == False {
return True;
}
}
multi sub infix:<?> ($n, $b) {
return $b ? $n;
}
Run Code Online (Sandbox Code Playgroud)
但是希望能够为真假引入新的符号.目前,我有:
say ((False ? ¬(False ? True)) ? (False ? True));
Run Code Online (Sandbox Code Playgroud)
但是,我想:
say ((? ? ¬(? ? ?)) ? (? ? ?));
Run Code Online (Sandbox Code Playgroud)
我想也许我可以将这些符号定义为常量:
constant ? = True;
constant ? = False;
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,那么我得到这个错误:
在/home/devXYZ/projects/test.pl6:1上的常量声明中缺少初始值设定项
Jon*_*ton 18
该?字符无效作为标识符:
say "?" ~~ /<.ident>/; # Nil
Run Code Online (Sandbox Code Playgroud)
即使constant语法允许声明这样的名称,也没有办法使用它,因为符号名称解析也只查找标识符.
我们需要将它作为一个新术语引入.这很像添加前缀或中缀运算符,因为它扩展了语言以接受它本来不会接受的东西.这可以使用constant,像这样:
constant \term:<?> = True;
say ?; # True
Run Code Online (Sandbox Code Playgroud)
要确保在定义和使用行中使用正确的unicode字符,可以使用方便的.&uniname方法.不同的字符看起来与某些字体类似:
> say "?".&uniname
PERPENDICULAR
> say "?".&uniname
UP TACK
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |