SMOLNET PORTAL home about changes
(uiop:define-package :st-buchberger/src/polynomial-ring
 (:mix :cl)
 (:mix-reexport :st-buchberger/src/monomial-orderings)
 (:export #:polynomial-ring #:initialize-instance
  #:print-object #:*ring* #:with-polynomial-ring
  #:variables #:base-field))

(in-package #:st-buchberger/src/polynomial-ring)


(defclass polynomial-ring (ring)
  ((variables
    :reader variables
    :initarg :variables
    :initform (error "You must specify at least one variable"))
   (base-field
    :reader base-field
    :initarg :base-field
    :initform 'rational)))

(defmethod initialize-instance :after ((ring polynomial-ring) &key)
  (flet ((make-variables ()
           (let ((vars (variables ring)))
             (if (consp vars)
                 vars
                 (list vars)))))
    (setf (slot-value ring 'variables) (make-variables))))

(defmethod print-object ((ring polynomial-ring) stream)
  (print-unreadable-object (ring stream :type t)
    (format stream "~@{~S ~S~^ ~}"
            :variables (variables ring)
            :base-field (base-field ring))))

(defvar *ring*
  (make-instance 'polynomial-ring :variables '(x y z))
  "Default polynomial ring")

(defmacro with-polynomial-ring (ring &body body)
  `(let ((*ring* ,ring))
     ,@body))
Response: text/plain
Original URLgopher://tilde.institute/0/~screwtape/st-buchberger/src/p...
Content-Typetext/plain; charset=utf-8