Enum Digit

Source
pub enum Digit {
    Neg,
    Zero,
    Pos,
}
Expand description

Represents a digit in the balanced ternary numeral system.

A digit can have one of three values:

  • Neg (-1): Represents the value -1 in the balanced ternary system.
  • Zero (0): Represents the value 0 in the balanced ternary system.
  • Pos (+1): Represents the value +1 in the balanced ternary system.

Provides utility functions for converting to/from characters, integers, and negation.

Variants§

§

Neg

Represents -1

§

Zero

Represents 0

§

Pos

Represents +1

Implementations§

Source§

impl Digit

Source

pub fn to_char(&self) -> char

Converts the Digit into its character representation.

  • Returns:
    • - for Digit::Neg
    • 0 for Digit::Zero
    • + for Digit::Pos
Source

pub fn from_char(c: char) -> Digit

Creates a Digit from its character representation.

  • Accepts:
    • - for Digit::Neg
    • 0 for Digit::Zero
    • + for Digit::Pos
  • Panics if the input character is invalid.
Source

pub fn to_i8(&self) -> i8

Converts the Digit into its integer representation.

  • Returns:
    • -1 for Digit::Neg
    • 0 for Digit::Zero
    • 1 for Digit::Pos
Source

pub fn from_i8(i: i8) -> Digit

Creates a Digit from its integer representation.

  • Accepts:
    • -1 for Digit::Neg
    • 0 for Digit::Zero
    • 1 for Digit::Pos
  • Panics if the input integer is invalid.
Source

pub fn possibly(self) -> Self

Returns the corresponding possible value of the current Digit.

  • Returns:
    • Digit::Neg for Digit::Neg
    • Digit::Pos for Digit::Zero
    • Digit::Pos for Digit::Pos
Source

pub fn necessary(self) -> Self

Determines the condition of necessity for the current Digit.

  • Returns:
    • Digit::Neg for Digit::Neg
    • Digit::Neg for Digit::Zero
    • Digit::Pos for Digit::Pos

This method is used to calculate necessity as part of balanced ternary logic systems.

Source

pub fn contingently(self) -> Self

Determines the condition of contingency for the current Digit.

  • Returns:
    • Digit::Neg for Digit::Neg
    • Digit::Pos for Digit::Zero
    • Digit::Neg for Digit::Pos

This method represents contingency in balanced ternary logic, which defines the specific alternation of Digit values.

Source

pub fn absolute_positive(self) -> Self

Returns the absolute positive value of the current Digit.

  • Returns:
    • Digit::Pos for Digit::Neg
    • Digit::Zero for Digit::Zero
    • Digit::Pos for Digit::Pos
Source

pub fn positive(self) -> Self

Determines the strictly positive condition for the current Digit.

  • Returns:
    • Digit::Zero for Digit::Neg
    • Digit::Zero for Digit::Zero
    • Digit::Pos for Digit::Pos

This method is used to calculate strictly positive states in association with ternary logic.

Source

pub fn not_negative(self) -> Self

Determines the condition of non-negativity for the current Digit.

  • Returns:
    • Digit::Zero for Digit::Neg
    • Digit::Pos for Digit::Zero
    • Digit::Pos for Digit::Pos

This method is used to filter out negative conditions in computations with balanced ternary representations.

Source

pub fn not_positive(self) -> Self

Determines the condition of non-positivity for the current Digit.

  • Returns:
    • Digit::Neg for Digit::Neg
    • Digit::Neg for Digit::Zero
    • Digit::Zero for Digit::Pos

This method complements the positive condition and captures states that are not strictly positive.

Source

pub fn negative(self) -> Self

Determines the strictly negative condition for the current Digit.

  • Returns:
    • Digit::Neg for Digit::Neg
    • Digit::Zero for Digit::Zero
    • Digit::Zero for Digit::Pos

This method calculates strictly negative states in association with ternary logic.

Source

pub fn absolute_negative(self) -> Self

Returns the absolute negative value of the current Digit.

  • Returns:
    • Digit::Neg for Digit::Neg
    • Digit::Zero for Digit::Zero
    • Digit::Neg for Digit::Pos
Source

pub fn k3_imply(self, other: Self) -> Self

Performs Kleene implication with the current Digit as self and another Digit.

  • self: The antecedent of the implication.

  • other: The consequent of the implication.

  • Returns:

    • Digit::Pos when self is Digit::Neg.
    • The positive condition of other when self is Digit::Zero.
    • other when self is Digit::Pos.

Implements Kleene ternary implication logic, which includes determining the logical result based on antecedent and consequent.

Source

pub fn k3_equiv(self, other: Self) -> Self

Apply a ternary equivalence operation for the current Digit and another Digit.

  • self: The first operand of the equivalence operation.

  • other: The second operand of the equivalence operation.

  • Returns:

    • The negation of other when self is Digit::Neg.
    • Digit::Zero when self is Digit::Zero.
    • other when self is Digit::Pos.

This method implements a ternary logic equivalence, which captures the relationship between two balanced ternary Digits based on their logical equivalence.

Source

pub fn bi3_and(self, other: Self) -> Self

Performs a ternary AND operation for the current Digit and another Digit.

  • self: The first operand of the AND operation.

  • other: The second operand of the AND operation.

  • Returns:

    • Digit::Neg if self is Digit::Neg and other is not Digit::Zero.
    • Digit::Zero if either self or other is Digit::Zero.
    • other if self is Digit::Pos.

This method implements Bochvar’s internal three-valued logic in balanced ternary AND operation, which evaluates the logical conjunction of two Digits in the ternary logic system.

Source

pub fn bi3_or(self, other: Self) -> Self

Performs a ternary OR operation for the current Digit and another Digit.

  • self: The first operand of the OR operation.

  • other: The second operand of the OR operation.

  • Returns:

    • other if self is Digit::Neg.
    • Digit::Zero if self is Digit::Zero.
    • Digit::Pos if self is Digit::Pos and other is not Digit::Zero.

This method implements Bochvar’s three-valued internal ternary logic for the OR operation, determining the logical disjunction of two balanced ternary Digits.

Source

pub fn bi3_imply(self, other: Self) -> Self

Performs Bochvar’s internal three-valued implication with the current Digit as self and another Digit as the consequent.

  • self: The antecedent of the implication.

  • other: The consequent of the implication.

  • Returns:

    • Digit::Zero if self is Digit::Neg and other is Digit::Zero.
    • Digit::Pos if self is Digit::Neg and other is not Digit::Zero.
    • Digit::Zero if self is Digit::Zero.
    • other if self is Digit::Pos.

This method implements Bochvar’s internal implication logic, which evaluates the logical consequence, between two balanced ternary Digits in a manner consistent with three-valued logic principles.

Source

pub fn l3_imply(self, other: Self) -> Self

Performs Łukasiewicz implication with the current Digit as self and another Digit.

  • self: The antecedent of the implication.

  • other: The consequent of the implication.

  • Returns:

    • Digit::Pos when self is Digit::Neg.
    • The non-negative condition of other when self is Digit::Zero.
    • other when self is Digit::Pos.

Implements Łukasiewicz ternary implication logic, which evaluates an alternative approach for implication compared to Kleene logic.

Source

pub fn rm3_imply(self, other: Self) -> Self

Performs RM3 implication with the current Digit as self and another Digit.

  • self: The antecedent of the implication.

  • other: The consequent of the implication.

  • Returns:

    • Digit::Pos when self is Digit::Neg.
    • other when self is Digit::Zero.
    • The necessary condition of other when self is Digit::Pos.

Implements RM3 ternary implication logic, which defines a unique perspective for implication operations in balanced ternary systems.

Source

pub fn ht_imply(self, other: Self) -> Self

Performs HT implication with the current Digit as self and another Digit.

  • self: The antecedent of the implication.

  • other: The consequent of the implication.

  • Returns:

    • Digit::Pos when self is Digit::Neg.
    • The possibility condition of other when self is Digit::Zero.
    • other when self is Digit::Pos.

This method computes HT ternary implication based on heuristic logic.

Source

pub fn ht_not(self) -> Self

Performs HT logical negation of the current Digit.

  • Returns:
    • Digit::Pos when self is Digit::Neg.
    • Digit::Neg when self is Digit::Zero or Digit::Pos.

This method evaluates the HT negation result using heuristic ternary logic.

Source

pub fn ht_bool(self) -> bool

Converts the Digit to a bool in HT logic.

Source

pub fn post(self) -> Self

Performs Post’s negation of the current Digit.

  • Returns:
    • Digit::Zero when self is Digit::Neg.
    • Digit::Pos when self is Digit::Zero.
    • Digit::Neg when self is Digit::Pos.

This method evaluates the negation based on Post’s logic in ternary systems, which differs from standard negation logic.

Source

pub fn pre(self) -> Self

Performs the inverse operation from the Post’s negation of the current Digit.

  • Returns:
    • Digit::Pos when self is Digit::Neg.
    • Digit::Neg when self is Digit::Zero.
    • Digit::Zero when self is Digit::Pos.
Source

pub fn to_unbalanced(self) -> u8

This method maps this Digit value to its corresponding unbalanced ternary integer representation.

  • Returns:
    • 0 for Digit::Neg.
    • 1 for Digit::Zero.
    • 2 for Digit::Pos.
Source

pub fn from_unbalanced(u: u8) -> Digit

Creates a Digit from an unbalanced ternary integer representation.

§Arguments:
  • u: An unsigned 8-bit integer representing an unbalanced ternary value.
§Returns:
  • Digit::Neg for 0.
  • Digit::Zero for 1.
  • Digit::Pos for 2.
§Panics:
  • Panics if the provided value is not 0, 1, or 2, as these are the only valid representations of unbalanced ternary values.

Trait Implementations§

Source§

impl Add for Digit

Source§

fn add(self, other: Digit) -> Self::Output

Adds two Digit values together and returns a Ternary result.

  • The rules for addition are based on ternary arithmetic:

    • For Digit::Neg:
      • Adding Digit::Neg results in “underflow” (Ternary::parse("-+")).
      • Adding Digit::Zero keeps the result as Digit::Neg (Ternary::parse("-")).
      • Adding Digit::Pos results in a balance (Ternary::parse("0")).
    • For Digit::Zero:
      • Simply returns the other operand wrapped in a Ternary object.
    • For Digit::Pos:
      • Adding Digit::Neg results in balance (Ternary::parse("0")).
      • Adding Digit::Zero keeps the result as Digit::Pos (Ternary::parse("+")).
      • Adding Digit::Pos results in “overflow” (Ternary::parse("+-")).
  • Returns:

    • A Ternary instance that holds the result of the addition.
  • Panics:

    • This method does not panic under any circumstances.
Source§

type Output = Ternary

The resulting type after applying the + operator.
Source§

impl BitAnd for Digit

Source§

fn bitand(self, other: Self) -> Self::Output

Performs a bitwise AND operation between two Digit values and returns the result.

  • The rules for the bitwise AND (&) operation are:
    • If self is Digit::Neg, the result is always Digit::Neg.
    • If self is Digit::Zero, the result depends on the value of other:
      • Digit::Neg results in Digit::Neg.
      • Otherwise, the result is Digit::Zero.
    • If self is Digit::Pos, the result is simply other.
§Returns:
  • A Digit value that is the result of the bitwise AND operation.
§Examples:
use balanced_ternary::Digit;
use Digit::{Neg, Pos, Zero};

assert_eq!(Neg & Pos, Neg);
assert_eq!(Zero & Neg, Neg);
assert_eq!(Zero & Pos, Zero);
assert_eq!(Pos & Zero, Zero);
Source§

type Output = Digit

The resulting type after applying the & operator.
Source§

impl BitOr for Digit

Source§

fn bitor(self, other: Self) -> Self::Output

Performs a bitwise OR operation between two Digit values and returns the result.

  • The rules for the bitwise OR (|) operation are as follows:
    • If self is Digit::Neg, the result is always the value of other.
    • If self is Digit::Zero, the result depends on the value of other:
      • Digit::Pos results in Digit::Pos.
      • Otherwise, the result is Digit::Zero.
    • If self is Digit::Pos, the result is always Digit::Pos.
§Returns:
  • A Digit value that is the result of the bitwise OR operation.
§Examples:
use balanced_ternary::Digit;
use Digit::{Neg, Pos, Zero};

assert_eq!(Neg | Pos, Pos);
assert_eq!(Zero | Neg, Zero);
assert_eq!(Zero | Pos, Pos);
assert_eq!(Pos | Zero, Pos);
Source§

type Output = Digit

The resulting type after applying the | operator.
Source§

impl BitXor for Digit

Source§

fn bitxor(self, rhs: Self) -> Self::Output

Performs a bitwise XOR (exclusive OR) operation between two Digit values.

  • The rules for the bitwise XOR (^) operation are as follows:
    • If self is Digit::Neg, the result is always the value of rhs.
    • If self is Digit::Zero, the result is always Digit::Zero.
    • If self is Digit::Pos, the result is the negation of rhs:
      • Digit::Neg becomes Digit::Pos.
      • Digit::Zero becomes Digit::Zero.
      • Digit::Pos becomes Digit::Neg.
§Returns:
  • A Digit value that is the result of the bitwise XOR operation.
§Examples:
use balanced_ternary::Digit;
use Digit::{Neg, Pos, Zero};

assert_eq!(Neg ^ Pos, Pos);
assert_eq!(Zero ^ Neg, Zero);
assert_eq!(Pos ^ Pos, Neg);
Source§

type Output = Digit

The resulting type after applying the ^ operator.
Source§

impl Clone for Digit

Source§

fn clone(&self) -> Digit

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Digit

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Div for Digit

Source§

fn div(self, other: Digit) -> Self::Output

Divides one Digit value by another and returns the result as a Digit.

§Rules for division:
  • For Digit::Neg:
    • Dividing Digit::Neg by Digit::Neg results in Digit::Pos.
    • Dividing Digit::Neg by Digit::Zero will panic with “Cannot divide by zero.”
    • Dividing Digit::Neg by Digit::Pos results in Digit::Neg.
  • For Digit::Zero:
    • Dividing Digit::Zero by Digit::Neg results in Digit::Zero.
    • Dividing Digit::Zero by Digit::Zero will panic with “Cannot divide by zero.”
    • Dividing Digit::Zero by Digit::Pos results in Digit::Zero.
  • For Digit::Pos:
    • Dividing Digit::Pos by Digit::Neg results in Digit::Neg.
    • Dividing Digit::Pos by Digit::Zero will panic with “Cannot divide by zero.”
    • Dividing Digit::Pos by Digit::Pos results in Digit::Pos.
§Returns:
  • A Digit value representing the result of the division.
§Panics:
  • Panics with “Cannot divide by zero.” if the other operand is Digit::Zero.
Source§

type Output = Digit

The resulting type after applying the / operator.
Source§

impl From<Digit> for char

Source§

fn from(value: Digit) -> Self

Converts to this type from the input type.
Source§

impl From<Digit> for i8

Source§

fn from(value: Digit) -> Self

Converts to this type from the input type.
Source§

impl From<char> for Digit

Source§

fn from(value: char) -> Self

Converts to this type from the input type.
Source§

impl From<i8> for Digit

Source§

fn from(value: i8) -> Self

Converts to this type from the input type.
Source§

impl Hash for Digit

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Mul for Digit

Source§

fn mul(self, other: Digit) -> Self::Output

Multiplies two Digit values together and returns the product as a Digit.

  • The rules for multiplication in this implementation are straightforward:

    • Digit::Neg multiplied by:
      • Digit::Neg results in Digit::Pos.
      • Digit::Zero results in Digit::Zero.
      • Digit::Pos results in Digit::Neg.
    • Digit::Zero multiplied by any Digit always results in Digit::Zero.
    • Digit::Pos multiplied by:
      • Digit::Neg results in Digit::Neg.
      • Digit::Zero results in Digit::Zero.
      • Digit::Pos results in Digit::Pos.
  • Returns:

    • A Digit instance representing the result of the multiplication.
Source§

type Output = Digit

The resulting type after applying the * operator.
Source§

impl Neg for Digit

Source§

fn neg(self) -> Self::Output

Returns the negation of the Digit.

  • Digit::Neg becomes Digit::Pos
  • Digit::Pos becomes Digit::Neg
  • Digit::Zero remains Digit::Zero
Source§

type Output = Digit

The resulting type after applying the - operator.
Source§

impl Not for Digit

Source§

type Output = Digit

The resulting type after applying the ! operator.
Source§

fn not(self) -> Self::Output

Performs the unary ! operation. Read more
Source§

impl PartialEq for Digit

Source§

fn eq(&self, other: &Digit) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Sub for Digit

Source§

fn sub(self, other: Digit) -> Self::Output

Subtracts two Digit values and returns a Ternary result.

  • The rules for subtraction are based on ternary arithmetic:

    • For Digit::Neg:
      • Subtracting Digit::Neg results in balance (Ternary::parse("0")).
      • Subtracting Digit::Zero keeps the result as Digit::Neg (Ternary::parse("-")).
      • Subtracting Digit::Pos results in “underflow” (Ternary::parse("-+")).
    • For Digit::Zero:
      • Simply negates the other operand and returns it wrapped in a Ternary object.
    • For Digit::Pos:
      • Subtracting Digit::Neg results in “overflow” (Ternary::parse("+-")).
      • Subtracting Digit::Zero keeps the result as Digit::Pos (Ternary::parse("+")).
      • Subtracting Digit::Pos results in balance (Ternary::parse("0")).
  • Returns:

    • A Ternary instance that holds the result of the subtraction.
  • Panics:

    • This method does not panic under any circumstances.
Source§

type Output = Ternary

The resulting type after applying the - operator.
Source§

impl Copy for Digit

Source§

impl Eq for Digit

Source§

impl StructuralPartialEq for Digit

Auto Trait Implementations§

§

impl Freeze for Digit

§

impl RefUnwindSafe for Digit

§

impl Send for Digit

§

impl Sync for Digit

§

impl Unpin for Digit

§

impl UnwindSafe for Digit

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.