;; -*- Mode:Common-Lisp;Package:mma; Base:10 -*- (in-package :mma) ;;; Extended numbers ... ;;; generalized Complex numbers stored as structures containing two ;;; generalized numbers ;;; which are interpreted as real and imaginary parts of a quantity. ;;; Often, each part is a bigfloat, but could be some other number ;;; quantity (not a complex, please.) ;; declare the structure of complex ;; we use a rectangular form, but could presumably use (r, theta) ;; if we wished to change a few of the routines. (deftype mma::newcomplex () '(or lisp::complex mma::Complex)) ;; wha?? (defstruct (Complex ;; this is in the mma package (:constructor make-Complex (real imag)) (:print-function complexprintfunction)) (real :read-only t) ;;real (imag :read-only t) ;; imag ) (defun complexprintfunction (x s pl) (declare (ignore pl)) (format s "(~s + ~s I)" (Realpart x)(Imagpart x))) (defun Realpart(x)(typecase x (lisp::number (realpart x)) (Complex (Complex-real x)) (t `(Real ,x)))) (defun Imagpart(x)(typecase x (lisp::number (imagpart x)) (Complex (Complex-imag x)) (t `(Imag ,x))))