SMOLNET PORTAL home about changes
(uiop:define-package :st-buchberger/src/ring-element
 (:mix :cl)
 (:mix-reexport :st-buchberger/src/ring)
 (:export #:ring-element #:ring-division-by-zero
  #:ring-copy #:ring-zero-p #:ring-equal-p
  #:ring-identity-p
  #:ring+ #:ring- #:ring* #:ring/ #:ring-mod
  #:add #:sub #:mul #:divides-p #:div #:div-mod
  #:element->string #:ring-lcm #:base-ring))

(in-package :st-buchberger/src/ring-element)

;; (defgeneric monomial (future-term))
;; (defgeneric coefficient (future-term))

(defclass ring-element ()
  (base-ring)
  (:documentation "Base class for ring elements."))

(define-condition ring-division-by-zero (error)
  ((operands
    :initarg :operands
    :reader operands)))

(defgeneric ring-copy (element)
  (:documentation "Returns a deep copy of an element"))

(defgeneric ring-zero-p (element)
  (:documentation "Returns t if element is zero, nil otherwise"))

(defgeneric ring-equal-p (e1 e2)
  (:documentation "Returns t if e1 equals e2, nil otherwise"))

(defgeneric ring-identity-p (element)
  (:documentation "Returns t if element is the multiplicative
  identity, nil otherwise"))

(defgeneric ring+ (element &rest more-elements))
(defgeneric ring- (element &rest more-elements))
(defgeneric ring* (element &rest more-elements))
(defgeneric ring/ (element &rest more-elements))
(defgeneric ring-mod (element &rest more-elements))

(defgeneric add (e1 e2)
  (:documentation "Adds ring elements"))

(defgeneric sub (e1 e2)
  (:documentation "Subtracts ring elements"))

(defgeneric mul (e1 e2)
  (:documentation "Multiplies ring elements"))

(defgeneric divides-p (e1 e2)
  (:documentation "Returns t if e1 divides e2 in the base ring"))

(defgeneric div (e1 e2)
  (:documentation "Divides ring elements"))

(defgeneric divmod (element divisors)
  (:documentation "Returns quotient(s) and remainder if we are working
  in an Euclidean ring."))

(defgeneric element->string (element &key &allow-other-keys)
  (:documentation "Returns a human-readable string representation of
  an element"))

(defgeneric ring-lcm (e1 e2)
  (:documentation "Returns the LCM of e1 and e2"))
Response: text/plain
Original URLgopher://tilde.institute/0/~screwtape/st-buchberger/src/r...
Content-Typetext/plain; charset=utf-8