common lisp complex numbers, also common lisp rational numbers
Subject: common lisp complex numbers, also common lisp rational numbers
From: Steve Haflich
Date: Thu, 01 Mar 2012 13:30:18 -0800
Henry Baker <hbaker1 at pipeline.com> wrote:
Now it might be a good idea to first _extend_ Common Lisp with Maxima
data types, and only then interpret/compile the Maxima language in
this extended language.
If you wanted to do this cleanly, you probably want to implement
Maxima data types in CLOS (object-oriented language for Common Lisp).
This is because CLOS has full generic functions, so it is easy to add
new datatypes to an already existing function. In a compiled
language like C++, this notion is called "overloading"; CLOS allows
overloading for _any_ generic function, not just for +,-,*,/,^, etc.
(Ummm, CL is also a compiled language. But nevermind...)
Not _every_ generic function can be overloaded in arbitrary ways.
Adding a specialized primary method to handle a new class of argument
will not necessarily work if the gf has :around, :before, or :after
methods. Those methods will also see the extended argument classes and
must be prepared to accept them.
A more serious problem is that the functions +,-,*,/,^, etc. are _not_
specified to be generic functions. They are _allowed_ to be gfs, but it
was a performance choice by X3J13 (wanting to define an
industrial-strength programming language) not to require all functions
be gfs.
One could of course modify an exiting CL implementation to make all the
desired functions generic, but this would be a larger,
more-destabilizing, and more performance-killing job than one first
might think. But I do agree it would be a neat thing to have!