定义⊤符号

时间:2018-03-25 03:48:31

标签: constants declaration perl6 initializer 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;
}

但是我希望能够为真假引入新的符号。目前,我有:

say ((False ⇒ ¬(False ∨ True)) ∧ (False ∨ True));

但是,我想:

say ((⟂ ⇒ ¬(⟂ ∨ ⊤)) ∧ (⟂ ∨ ⊤));

我想也许我可以将这些符号定义为常量:

constant ⊤ = True;
constant ⊥ = False;

但是,如果我这样做,那么我会收到这个错误:

  

在常量声明处缺少初始化程序   /home/devXYZ/projects/test.pl6:1

1 个答案:

答案 0 :(得分:17)

字符无效作为标识符:

say "⊤" ~~ /<.ident>/; # Nil      

即使constant语法允许声明这样的名称,也没有办法使用它,因为符号名称解析也只查找标识符。

需要将它作为新术语引入。这很像添加前缀或中缀运算符,因为它扩展了语言以接受它本来不会接受的东西。这可以使用constant完成,如下所示:

constant \term:<⊤> = True;
say ⊤; # True

为确保您在定义和使用行中使用了正确的unicode字符,您可以使用方便的.&uniname方法。不同的字符看起来与某些字体类似:

> say "⟂".&uniname
PERPENDICULAR
> say "⊥".&uniname
UP TACK