代数 - 環
群 \((X, 0, \pm)\) に積と割り算を足して出来る \((X, 0, 1, \pm, \times, \div)\) のこと.
/// Algebra - Ring ((+, 0), (*, 1))
use crate::algebra::group_additive::*;
use crate::algebra::monoid::*;
pub trait Ring: AGroup + Monoid {}
#[macro_export]
macro_rules! ring {
(
$type:ty where [ $( $params:tt )* ];
div($self:ident, $other:ident) = $code:block
$(;)*
) => {
impl<$($params)*> std::ops::Div for $type {
type Output = Self;
fn div($self, $other: Self) -> Self { $code }
}
impl<$($params)*> std::ops::DivAssign for $type where Self: Clone {
fn div_assign(&mut $self, $other: Self) { *$self = (*$self).clone() / $other; }
}
impl Ring for $type {}
};
(
$type:ty;
div($self:ident, $other:ident) = $code:block
$(;)*
) => {
ring! { $type where []; div($self, $other) = $code; }
};
}
impl Ring for i64 {}
impl Ring for f64 {}