Определите символ ⊤ ("вниз") как константу, которую я могу использовать в своей программе
Я пытаюсь написать некоторые логические утверждения в 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