将“down tack”字符定义为我可以在程序中使用的常量

11

我想在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个回答

18

字符不是有效的标识符:

say "⊤" ~~ /<.ident>/; # Nil      
即使constant语法允许声明这样的名称,也没有办法使用它,因为符号名称解析只查找标识符。需要的是将其作为一个新术语引入。这很像添加前缀或中缀运算符,它扩展了语言接受否则不会接受的东西。可以使用constant来实现这一点,就像这样:
constant \term:<⊤> = True;
say ⊤; # True

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

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

1
第一段代码中的单引号 ' 不应该出现在那里。我试图将其编辑掉,但是stackoverflow不允许少于6个字符的编辑... - timotimo
通过更加详细地表述,我修复了它;-) - G. Cito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接