Определите символ ⊤ ("вниз") как константу, которую я могу использовать в своей программе

Я пытаюсь написать некоторые логические утверждения в 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

is недействителен как идентификатор:

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

Даже если constant синтаксис разрешил объявление такого имени, не было бы способа его использовать, поскольку синтаксический анализ имен символов также ищет также идентификаторы.

Нужно ввести его в качестве нового термина. Это очень похоже на добавление префикса или инфиксного оператора, поскольку он расширяет язык, чтобы принимать вещи, которых иначе не было бы. Это можно сделать с помощью constant, например:

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

Чтобы убедиться, что вы используете правильный символ .&uniname строках определения и использования, вы можете использовать удобный метод .&uniname. Различные символы могут выглядеть схожими с определенными шрифтами:

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