NAME
Math::Logic::Ternary::Trit - ternary logical information unit
VERSION
This documentation refers to version 0.004 of Math::Logic::Ternary::Trit.
SYNOPSIS
use Math::Logic::Ternary::Trit;
$a = Math::Logic::Ternary::Trit->true;
$a = Math::Logic::Ternary::Trit->from_string('true'); # same as above
$a = Math::Logic::Ternary::Trit->from_int(1); # same as above
$a = Math::Logic::Ternary::Trit->from_bool(1 == 1); # same as above
$b = Math::Logic::Ternary::Trit->false;
$b = Math::Logic::Ternary::Trit->from_string('false'); # same as above
$b = Math::Logic::Ternary::Trit->from_int(-1); # same as above
$b = Math::Logic::Ternary::Trit->from_bool(0 == 1); # same as above
$c = Math::Logic::Ternary::Trit->nil;
$c = Math::Logic::Ternary::Trit->from_string('nil'); # same as above
$c = Math::Logic::Ternary::Trit->from_int(0); # same as above
$c = Math::Logic::Ternary::Trit->from_bool(undef); # same as above
$d = $a->and($b)->or($a->not->and($c));
print $d->as_string; # print '$false'
print $d->as_int; # print -1
DESCRIPTION
Math::Logic::Ternary::Trit is the class for ternary logical values aka trits. This class has only three instances, representing ternary truth values: true, false, and nil. It also implements logical operators, conversions and the role defined by Math::Logic::Ternary::Object.
Exports
None.
Constants
- nil
-
The nil trit.
- true
-
The true trit.
- false
-
The false trit.
Unary Operators
- sn
-
Set to nil.
+-------+-------+ | A | sn A | +-------+-------+ | false | nil | | nil | nil | | true | nil | +-------+-------+
- st
-
Set to true.
+-------+-------+ | A | st A | +-------+-------+ | false | true | | nil | true | | true | true | +-------+-------+
- sf
-
Set to false.
+-------+-------+ | A | sf A | +-------+-------+ | false | false | | nil | false | | true | false | +-------+-------+
- id
-
Identity.
+-------+-------+ | A | id A | +-------+-------+ | false | false | | nil | nil | | true | true | +-------+-------+
- not
-
Not.
+-------+-------+ | A | not A | +-------+-------+ | false | true | | nil | nil | | true | false | +-------+-------+
- up
-
Up one: increment modulo 3.
+-------+-------+ | A | up A | +-------+-------+ | false | nil | | nil | true | | true | false | +-------+-------+
- nup
-
Not up: swap nil/false.
+-------+-------+ | A | nup A | +-------+-------+ | false | nil | | nil | false | | true | true | +-------+-------+
- dn
-
Down one: decrement modulo 3.
+-------+-------+ | A | dn A | +-------+-------+ | false | true | | nil | false | | true | nil | +-------+-------+
- ndn
-
Not down: swap nil/true.
+-------+-------+ | A | ndn A | +-------+-------+ | false | false | | nil | true | | true | nil | +-------+-------+
- eqn
-
Equal to nil.
+-------+-------+ | A | eqn A | +-------+-------+ | false | false | | nil | true | | true | false | +-------+-------+
- eqt
-
Equal to true.
+-------+-------+ | A | eqt A | +-------+-------+ | false | false | | nil | false | | true | true | +-------+-------+
- eqf
-
Equal to false.
+-------+-------+ | A | eqf A | +-------+-------+ | false | true | | nil | false | | true | false | +-------+-------+
- nen
-
Not equal to nil.
+-------+-------+ | A | nen A | +-------+-------+ | false | true | | nil | false | | true | true | +-------+-------+
- net
-
Not equal to true.
+-------+-------+ | A | net A | +-------+-------+ | false | true | | nil | true | | true | false | +-------+-------+
- nef
-
Not equal to false.
+-------+-------+ | A | nef A | +-------+-------+ | false | false | | nil | true | | true | true | +-------+-------+
- hm
-
Hamlet: x or not x.
+-------+-------+ | A | hm A | +-------+-------+ | false | true | | nil | nil | | true | true | +-------+-------+
- uhm
-
Up & hamlet.
+-------+-------+ | A | uhm A | +-------+-------+ | false | nil | | nil | true | | true | true | +-------+-------+
- dhm
-
Down & hamlet.
+-------+-------+ | A | dhm A | +-------+-------+ | false | true | | nil | true | | true | nil | +-------+-------+
- orn
-
Or nil.
+-------+-------+ | A | orn A | +-------+-------+ | false | nil | | nil | nil | | true | true | +-------+-------+
- uorn
-
Up & or nil.
+-------+--------+ | A | uorn A | +-------+--------+ | false | nil | | nil | true | | true | nil | +-------+--------+
- dorn
-
Down & or nil.
+-------+--------+ | A | dorn A | +-------+--------+ | false | true | | nil | nil | | true | nil | +-------+--------+
- qt
-
Quantum: x and not x.
+-------+-------+ | A | qt A | +-------+-------+ | false | false | | nil | nil | | true | false | +-------+-------+
- uqt
-
Up & quantum.
+-------+-------+ | A | uqt A | +-------+-------+ | false | nil | | nil | false | | true | false | +-------+-------+
- dqt
-
Down & quantum.
+-------+-------+ | A | dqt A | +-------+-------+ | false | false | | nil | false | | true | nil | +-------+-------+
- ann
-
And nil.
+-------+-------+ | A | ann A | +-------+-------+ | false | false | | nil | nil | | true | nil | +-------+-------+
- uann
-
Up & ann.
+-------+--------+ | A | uann A | +-------+--------+ | false | nil | | nil | nil | | true | false | +-------+--------+
- dann
-
Down & ann.
+-------+--------+ | A | dann A | +-------+--------+ | false | nil | | nil | false | | true | nil | +-------+--------+
Binary Operators
- and
-
And.
A and B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false false false | | nil | false nil nil | | true | false nil true | +-------+-----------------------+
- or
-
Or.
A or B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false nil true | | nil | nil nil true | | true | true true true | +-------+-----------------------+
- xor
-
Exclusive or.
A xor B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false nil true | | nil | nil nil nil | | true | true nil false | +-------+-----------------------+
- eqv
-
Equivalent.
A eqv B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true nil false | | nil | nil nil nil | | true | false nil true | +-------+-----------------------+
- imp
-
Implication (x ==> y).
A imp B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true true true | | nil | nil nil true | | true | false nil true | +-------+-----------------------+
- rep
-
Replication (x <== y).
A rep B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true nil false | | nil | true nil nil | | true | true true true | +-------+-----------------------+
- nand
-
Not and.
A nand B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true true true | | nil | true nil nil | | true | true nil false | +-------+-----------------------+
- nor
-
Not or.
A nor B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true nil false | | nil | nil nil false | | true | false false false | +-------+-----------------------+
- cmp
-
Compare (false < nil < true).
A cmp B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | nil false false | | nil | true nil false | | true | true true nil | +-------+-----------------------+
- asc
-
Ascending (false < nil < true).
A asc B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | nil true true | | nil | false nil true | | true | false false nil | +-------+-----------------------+
- tlr
-
The lesser (false < nil < true). Logically equivalent to and.
A tlr B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false false false | | nil | false nil nil | | true | false nil true | +-------+-----------------------+
- tgr
-
The greater (false < nil < true). Logically equivalent to or.
A tgr B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false nil true | | nil | nil nil true | | true | true true true | +-------+-----------------------+
- eq
-
Equal to.
A eq B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true false false | | nil | false true false | | true | false false true | +-------+-----------------------+
- ne
-
Not equal to.
A ne B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false true true | | nil | true false true | | true | true true false | +-------+-----------------------+
- lt
-
Less than (false < nil < true)
A lt B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false true true | | nil | false false true | | true | false false false | +-------+-----------------------+
- ge
-
Greater or equal (false < nil < true).
A ge B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true false false | | nil | true true false | | true | true true true | +-------+-----------------------+
- gt
-
Greater than (false < nil < true).
A gt B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false false false | | nil | true false false | | true | true true false | +-------+-----------------------+
- le
-
Less or equal (false < nil < true).
A le B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true true true | | nil | false true true | | true | false false true | +-------+-----------------------+
- cmpu
-
Compare (unbalanced, nil < true < false).
A cmpu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil false false | | true | true nil false | | false | true true nil | +-------+-----------------------+
- ascu
-
Ascending (unbalanced, nil < true < false).
A ascu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil true true | | true | false nil true | | false | false false nil | +-------+-----------------------+
- tlru
-
The lesser (unbalanced, nil < true < false).
A tlru B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil nil | | true | nil true true | | false | nil true false | +-------+-----------------------+
- tgru
-
The greater (unbalanced, nil < true < false).
A tgru B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil true false | | true | true true false | | false | false false false | +-------+-----------------------+
- ltu
-
Less than (unbalanced, nil < true < false).
A ltu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | false true true | | true | false false true | | false | false false false | +-------+-----------------------+
- geu
-
Greater or equal (unbalanced, nil < true < false).
A geu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | true false false | | true | true true false | | false | true true true | +-------+-----------------------+
- gtu
-
Greater than (unbalanced, nil < true < false).
A gtu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | false false false | | true | true false false | | false | true true false | +-------+-----------------------+
- leu
-
Less or equal (unbalanced, nil < true < false).
A gtu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | true true true | | true | false true true | | false | false false true | +-------+-----------------------+
- incr
-
Increment.
A incr B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | true false nil | | nil | false nil true | | true | nil true false | +-------+-----------------------+
- incc
-
Increment carry.
A incc B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false nil nil | | nil | nil nil nil | | true | nil nil true | +-------+-----------------------+
- inccu
-
Increment carry (unbalanced).
A inccu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil nil | | true | nil nil true | | false | nil true true | +-------+-----------------------+
- inccv
-
Increment carry (negative base).
A inccv B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil true | | true | nil nil nil | | false | nil false nil | +-------+-----------------------+
- decr
-
Decrement.
A decr B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | nil false true | | nil | true nil false | | true | false true nil | +-------+-----------------------+
- decc
-
Decrement carry.
A decc B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | nil nil true | | nil | nil nil nil | | true | false nil nil | +-------+-----------------------+
- deccu
-
Decrement carry (unbalanced).
A deccu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil true true | | true | nil nil true | | false | nil nil nil | +-------+-----------------------+
- deccv
-
Decrement carry (negative base)
A deccv B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil false nil | | true | nil nil nil | | false | nil nil true | +-------+-----------------------+
- pty
-
Parity.
A pty B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false true nil | | nil | true nil false | | true | nil false true | +-------+-----------------------+
- dpl
-
Duplicate.
A dpl B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | nil true false | | nil | false nil true | | true | true false nil | +-------+-----------------------+
- dplc
-
Duplication carry.
A dplc B +---+---------------------------+ | A | B false nil true | | +---+-----------------------+ | false | false false nil | | nil | nil nil nil | | true | nil true true | +-------+-----------------------+
- dplcu
-
Duplication carry (unbalanced).
A dplcu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil nil | | true | nil true true | | false | true true false | +-------+-----------------------+
- dplcv
-
Duplication carry (negative base).
A dplcv B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil true | | true | nil false nil | | false | false false false | +-------+-----------------------+
- negcv
-
Negation carry (negative base).
A negcv B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil nil | | true | true nil nil | | false | true true nil | +-------+-----------------------+
- mulcu
-
Multiplication carry (unbalanced).
A mulcu B +---+---------------------------+ | A | B nil true false | | +---+-----------------------+ | nil | nil nil nil | | true | nil nil nil | | false | nil nil true | +-------+-----------------------+
Ternary Operators
- add
-
Addition.
add A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | nil true false | | false | nil | true false nil | | false | true | false nil true | | | | | | nil | false | true false nil | | nil | nil | false nil true | | nil | true | nil true false | | | | | | true | false | false nil true | | true | nil | nil true false | | true | true | true false nil | +-------+-------+-----------------------+
- addc
-
Addition carry.
addc A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | false false nil | | false | nil | false nil nil | | false | true | nil nil nil | | | | | | nil | false | false nil nil | | nil | nil | nil nil nil | | nil | true | nil nil true | | | | | | true | false | nil nil nil | | true | nil | nil nil true | | true | true | nil true true | +-------+-------+-----------------------+
- addcu
-
Addition carry (unbalanced).
addcu A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil nil nil | | nil | true | nil nil true | | nil | false | nil true true | | | | | | true | nil | nil nil true | | true | true | nil true true | | true | false | true true true | | | | | | false | nil | nil true true | | false | true | true true true | | false | false | true true false | +-------+-------+-----------------------+
- addcv
-
Addition carry (negative base).
addcv A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil nil true | | nil | true | nil nil nil | | nil | false | nil false nil | | | | | | true | nil | nil nil nil | | true | true | nil false nil | | true | false | false false nil | | | | | | false | nil | nil false nil | | false | true | false false nil | | false | false | false false false | +-------+-------+-----------------------+
- addcx
-
Addition carry (mixed base).
For multiplication in base(-3), an addition of two trits 0..2 and one trit -1..1 can be useful. Addcx computes a signed carry trit for this kind of addition.
addcx A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil nil true | | nil | true | nil nil nil | | nil | false | true nil true | | | | | | true | nil | nil nil nil | | true | true | nil false nil | | true | false | nil nil true | | | | | | false | nil | nil false nil | | false | true | false false nil | | false | false | nil nil nil | +-------+-------+-----------------------+
- subt
-
Subtraction.
subt A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | true nil false | | false | nil | nil false true | | false | true | false true nil | | | | | | nil | false | false true nil | | nil | nil | true nil false | | nil | true | nil false true | | | | | | true | false | nil false true | | true | nil | false true nil | | true | true | true nil false | +-------+-------+-----------------------+
- subc
-
Subtraction carry.
subc A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | nil nil nil | | false | nil | nil nil true | | false | true | nil true true | | | | | | nil | false | false nil nil | | nil | nil | nil nil nil | | nil | true | nil nil true | | | | | | true | false | false false nil | | true | nil | false nil nil | | true | true | nil nil nil | +-------+-------+-----------------------+
- subcu
-
Subtraction carry (unbalanced).
subcu A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil true true | | nil | true | true true true | | nil | false | true true false | | | | | | true | nil | nil nil true | | true | true | nil true true | | true | false | true true true | | | | | | false | nil | nil nil nil | | false | true | nil nil true | | false | false | nil true true | +-------+-------+-----------------------+
- subcv
-
Subtraction carry (negative base).
subcv A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil false nil | | nil | true | false false nil | | nil | false | false false false | | | | | | true | nil | nil nil nil | | true | true | nil false nil | | true | false | false false nil | | | | | | false | nil | nil nil true | | false | true | nil nil nil | | false | false | nil false nil | +-------+-------+-----------------------+
- cmin
-
Ternary comparison to minimum.
cmin A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | nil nil nil | | false | nil | nil nil nil | | false | true | nil false false | | | | | | nil | false | nil nil nil | | nil | nil | nil nil nil | | nil | true | true false false | | | | | | true | false | true true false | | true | nil | true true false | | true | true | true true false | +-------+-------+-----------------------+
- cmed
-
Ternary comparison to median.
cmed A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | true true false | | false | nil | true true false | | false | true | true nil nil | | | | | | nil | false | true true false | | nil | nil | true true false | | nil | true | false true nil | | | | | | true | false | nil nil true | | true | nil | nil nil true | | true | true | false false true | +-------+-------+-----------------------+
- cmax
-
Ternary comparison to maximum.
cmax A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | false false true | | false | nil | false false true | | false | true | false true true | | | | | | nil | false | false false true | | nil | nil | false false true | | nil | true | nil nil true | | | | | | true | false | false false nil | | true | nil | false false nil | | true | true | nil nil nil | +-------+-------+-----------------------+
- cvld
-
Ternary comparison validation.
+-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | true true true | | false | nil | nil nil true | | false | true | false nil true | | | | | | nil | false | true nil nil | | nil | nil | nil true nil | | nil | true | nil nil true | | | | | | true | false | true nil false | | true | nil | true nil nil | | true | true | true true true | +-------+-------+-----------------------+
- min
-
Minimum of three.
min A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | false false false | | false | nil | false false false | | false | true | false false false | | | | | | nil | false | false false false | | nil | nil | false nil nil | | nil | true | false nil nil | | | | | | true | false | false false false | | true | nil | false nil nil | | true | true | false nil true | +-------+-------+-----------------------+
- med
-
Median of three.
med A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | false false false | | false | nil | false nil nil | | false | true | false nil true | | | | | | nil | false | false nil nil | | nil | nil | nil nil nil | | nil | true | nil nil true | | | | | | true | false | false nil true | | true | nil | nil nil true | | true | true | true true true | +-------+-------+-----------------------+
- max
-
Maximum of three.
max A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | false nil true | | false | nil | nil nil true | | false | true | true true true | | | | | | nil | false | nil nil true | | nil | nil | nil nil true | | nil | true | true true true | | | | | | true | false | true true true | | true | nil | true true true | | true | true | true true true | +-------+-------+-----------------------+
- minu
-
Minimum of three (unbalanced).
minu A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil nil nil | | nil | true | nil nil nil | | nil | false | nil nil nil | | | | | | true | nil | nil nil nil | | true | true | nil true true | | true | false | nil true true | | | | | | false | nil | nil nil nil | | false | true | nil true true | | false | false | nil true false | +-------+-------+-----------------------+
- medu
-
Median of three (unbalanced).
medu A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil nil nil | | nil | true | nil true true | | nil | false | nil true false | | | | | | true | nil | nil true true | | true | true | true true true | | true | false | true true false | | | | | | false | nil | nil true false | | false | true | true true false | | false | false | false false false | +-------+-------+-----------------------+
- maxu
-
Maximum of three (unbalanced).
maxu A, B, C +-------+---+---------------------------+ | A | B | C nil true false | | | +---+-----------------------+ | nil | nil | nil true false | | nil | true | true true false | | nil | false | false false false | | | | | | true | nil | true true false | | true | true | true true false | | true | false | false false false | | | | | | false | nil | false false false | | false | true | false false false | | false | false | false false false | +-------+-------+-----------------------+
- ipqc
-
Interpolation quadratic coefficient.
In modulo 3 arithmetic, a polynomial with values A, B, C at positions 0, 1, 2 can be computed as -(A + B + C) * x * x + (C - B) * x + A. For that reason, the negated sum of three trits modulo 3 has got the funny name ipqc.
ipqc A, B, C +-------+---+---------------------------+ | A | B | C false nil true | | | +---+-----------------------+ | false | false | nil false true | | false | nil | false true nil | | false | true | true nil false | | | | | | nil | false | false true nil | | nil | nil | true nil false | | nil | true | nil false true | | | | | | true | false | true nil false | | true | nil | nil false true | | true | true | false true nil | +-------+-------+-----------------------+
Quarternary Operators
- sum
-
Summation.
A result trit and a carry trit can hold the sum of three operand trits and a carry trit. Thus, addition of three numerical values can be implemented efficiently in ternary arithmetic based on this super addition operator with four trit arguments.
sum A, B, C, D +-------+---+---------------------------+ | A | B | C f f f n n n t t t | | | +---------------------------+ | | | D f n t f n t f n t | | | +---+-----------------------+ | false | false | f n t n t f t f n | | false | nil | n t f t f n f n t | | false | true | t f n f n t n t f | | | | | | nil | false | n t f t f n f n t | | nil | nil | t f n f n t n t f | | nil | true | f n t n t f t f n | | | | | | true | false | t f n f n t n t f | | true | nil | f n t n t f t f n | | true | true | n t f t f n f n t | +-------+-------+-----------------------+
- sumc
-
Summation carry.
sumc A, B, C, D +-------+---+---------------------------+ | A | B | C f f f n n n t t t | | | +---------------------------+ | | | D f n t f n t f n t | | | +---+-----------------------+ | false | false | f f f f f n f n n | | false | nil | f f n f n n n n n | | false | true | f n n n n n n n t | | | | | | nil | false | f f n f n n n n n | | nil | nil | f n n n n n n n t | | nil | true | n n n n n t n t t | | | | | | true | false | f n n n n n n n t | | true | nil | n n n n n t n t t | | true | true | n n t n t t t t t | +-------+-------+-----------------------+
- sumcu
-
Summation carry (unbalanced).
sumcu A, B, C, D +-------+---+---------------------------+ | A | B | C n n n t t t f f f | | | +---------------------------+ | | | D n t f n t f n t f | | | +---+-----------------------+ | nil | nil | n n n n n t n t t | | nil | true | n n t n t t t t t | | nil | false | n t t t t t t t f | | | | | | true | nil | n n t n t t t t t | | true | true | n t t t t t t t f | | true | false | t t t t t f t f f | | | | | | false | nil | n t t t t t t t f | | false | true | t t t t t f t f f | | false | false | t t f t f f f f f | +-------+-------+-----------------------+
- mpx
-
Multiplex. The first argument determines which one of the other arguments to return.
mpx A, B, C, D +-------+---+---------------------------+ | A | B | C n n n t t t f f f | | | +---------------------------+ | | | D n t f n t f n t f | | | +---+-----------------------+ | nil | nil | n n n n n n n n n | | nil | true | t t t t t t t t t | | nil | false | f f f f f f f f f | | | | | | true | nil | n n n t t t f f f | | true | true | n n n t t t f f f | | true | false | n n n t t t f f f | | | | | | false | nil | n t f n t f n t f | | false | true | n t f n t f n t f | | false | false | n t f n t f n t f | +-------+-------+-----------------------+
- generic
-
$trit->generic($op_name, @args)
evaluates a generic operator with the given arguments.Generic operator names consist of a letter and a number of digits from 0 to 2. Each letter stands for an operator signature and determines the number of digits completely describing the operator. The digits are mapped to trits nil, true, false, as with from_int_u.
c - constant, 1 digit designating the constant. Example: c1 is equivalent to true.
u - unary operator, 3 digits designating the result from nil, true, false. Example: u021 is equivalent to not.
b - binary operator, 9 digits designating the result from 9 possible pairs of input trits. Example: b000021012 is equivalent to xor.
s - symmetric ternary operator, 10 digits designating the result from 10 possible combinations of input trits (only enumerating the lexically first instance of permutations). Example: s0122010120 is equivalent to add.
t - ternary operator, 27 digits designating the result from 27 possible triples of input trits (lexically sorted). Example: t000010002002000202010110000 is equivalent to subc.
q - symmetric quaternary operator, 15 digits designating the result from 15 possible combinations of input trits (only enumerating the lexically first instance of permutations). Example: q000102100211022 is equivalent to sumc.
Q - quaternary operator, 81 digits designating the result from 81 possible quadruples of input trits (lexically sorted).
Math::Logic::Ternary::Object Role Methods
- Trit
-
Trit inspection:
$trit->Trit($n)
returns$trit
if$n
is 0, otherwise nil. - Trits
-
Trit inspection:
$trit->Trits
returns($trit)
, a list with one element. - Rtrits
-
$trit->Rtrits
returns an empty list if$trit
is nil, otherwise($trit)
, a list with one element. - Sign
-
$trit->Sign
returns$trit
. - as_int
-
$trit->as_int
returns an integer number, 0 for nil, 1 for true, and -1 for false. - as_int_u
- as_int_v
- res_mod3
-
$trit->as_int_u
returns an integer number, 0 for nil, 1 for true, and 2 for false.$trit->as_int_v
does the same.$trit->res_mod3
does the same. - as_string
-
$trit->as_string
returns a string,'$nil'
for nil,'$true'
for true, and'$false'
for false. - is_equal
-
$trit->is_equal($obj)
returns true if$trit->Rtrits
and$obj->Rtrits
are identical lists, otherwise false. This means a single trit is regarded as equal to itself and any word with the same least significant trit and no other non-nil trits.
Other Object Methods
- Mpx
-
Multiplex.
$trit->Mpx($case_n, $case_t, $case_f)
with three arbitrary arguments returns$case_n
if$trit
is nil,$case_t
if$trit
is true, or$case_f
if$trit
is false. - is_nil
-
$trit->is_nil
returns boolean true if$trit
is nil, otherwise false. - is_true
-
$trit->is_true
returns boolean true if$trit
is true, otherwise false. - is_false
-
$trit->is_false
returns boolean true if$trit
is false, otherwise false. - as_bool
-
$trit->as_bool
returns undef if$trit
is nil,1
(boolean true) if $trit is true, or an empty string (boolean false) if$trit
is false. - as_modint
-
$trit->as_modint
converts$trit
to a Math::ModInt object, mapping nil to mod(0, 3), true to mod(1, 3), and false to mod(2, 3).The Perl extension Math::ModInt (available on CPAN) must be installed for this to work, otherwise as_modint will raise a run-time exception.
Constructors
All constructors are class methods. They may raise an exception when called with unexpected arguments.
- from_bool
-
Math::Logic::Ternary->from_bool($arg)
returns nil if$arg
is undefined, false if$arg
is defined but false, or true if$arg
is true. - from_sign
-
Math::Logic::Ternary->from_sign($int)
returns nil if$int
is zero, true if$int
is positive, or false if$int
is negative. - from_remainder
-
Math::Logic::Ternary->from_remainder($int)
returns nil if$int
is equivalent to 0 (modulo 3), true if$int
is equivalent to 1 (modulo 3), or false if$int
is equivalent to 2 (modulo 3). - from_int
-
Math::Logic::Ternary->from_int($int)
returns nil if$int
is 0, true if$int
is 1, or false if$int
is -1. - from_int_u
-
Math::Logic::Ternary->from_int_u($int)
returns nil if$int
is 0, true if$int
is 1, or false if$int
is 2. - from_string
-
Math::Logic::Ternary->from_string($str)
returns nil if$str
is'nil'
or'$nil'
, true if$str
is'true'
or'$true'
, and false if$str
is'false'
or'$false'
. - from_modint
-
Math::Logic::Ternary->from_modint($obj)
returns nil or true or false if$obj
is a Math::ModInt object and$obj->modulus
is 3. A residue of 0, 1, or 2 maps to nil, true, or false, respectively. - from_various
-
Math::Logic::Ternary->from_various($arg)
guesses the type of its argument and calls one of the more specific constructors (but not from_remainder).
Other Class Methods
- make_generic
-
Math::Logic::Ternary->make_generic($op_name)
returns an operator coderef defined by a generic operator name. It can subsequently be called as a method on trits.Example:
$foo = Math::Logic::Ternary::Trit->make_generic('b021210102'); $bar = true->$foo(false); # $bar = nil $bar = $foo->(true, false); # $bar = nil
On the syntax of generic operator names, see "generic".
- trit_operators
-
Math::Logic::Ternary->trit_operators
returns a list of listrefs with all currently implemented named trit operators with these contents:[$name, $min_args, $var_args, $ret_vals, $arithmetic]
$name
is the name of the operator,$min_args
is the minimum number of arguments,$var_args
is the number of optional arguments,$ret_vals
is the number of return values,$arithmetic
is undefined unless the operator is an arithmetic operator belonging to balanced (= 0), unbalanced (= 1), or negative base (= 2) arithmetic.Currently,
$var_args
will be 0 and$ret_vals
will be 1 for all list entries. This may change in future releases.
DIAGNOSTICS
- unknown operator name "%s"
-
"generic" or "make_generic" was called with an invalid operator name.
- too few arguments, expected %d more
-
An operator was called with too few operands.
- integer "%d" out of range %d..%d
-
A constructor taking an integer argument was called with an argument outside its defined range.
- unknown trit name "%s"
-
"from_string" was called with an invalid trit name.
- modular integer with modulus 3 expected
-
"from_modint" was called with an invalid argument, either a modular integer with a modulus other than 3 or not a Math::ModInt object at all.
- cannot convert %s to a trit
-
"from_various" was called with an invalid argument.
- perl extension Math::ModInt is not available
-
"as_modint" was called on a platform where Math::ModInt can not be loaded. Installing Math::ModInt from CPAN should resolve this problem.
SEE ALSO
- Math::Logic::Ternary
- Math::Logic::Ternary::Object
- Math::Logic::Ternary::Word
- Math::Logic::Ternary::Calculator
AUTHOR
Martin Becker <becker-cpan-mp@cozap.com>
COPYRIGHT AND LICENSE
Copyright (c) 2012-2017 by Martin Becker, Blaubeuren. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.0 or, at your option, any later version of Perl 5 you may have available.