Compatibility between Maple V Release 3 to Maple V Release 4.

This document itemizes compatibility issues affecting users upgrading from Maple V Release 3 to Maple V Release 4.


Major Differences:


•

Release 3 .m files cannot be read by Release 4 Maple.

•

Grammar changes: ``:'' in procedure declarations replaced by ``::''. The old syntax is still accepted, but a warning is issued.

•

``::'' is an operator. See typematch. It used to mean "end of statement" followed by "null statement" followed by "end of statement".

•

The angle bracket functions have been removed. The two constructs <  > and <   > functions have been removed. The construct "< expr >" is no longer a function, but is a call to the anglebracket function. As an example "< x+2 >" used to be a function that adds 2 to its argument; now it is "anglebracket(x+2)". The function anglebracket does not have any specified meaning. To recover the Release 3 functionality:

< x+3 >

becomes

x > x+3

< x*y  x >

becomes

x > x*y

< x*y  x  y >

becomes

proc(x) local y; x*y end





Semantic changes:


•

Subrange indexing on a list returns a list instead of an expression sequence. For example: {L:=[10,20,30]; L[1..2]} returns the list {[10,20]} instead of the expression sequence {10, 20}. The same holds, mutatis mutandis, for sets.

•

The name `+` is now a function that evaluates (it does the addition). For example, {`+`(1,2)} returns 3. It used to remain unevaluated. This affects type checking, {type(z+x+y, `+`( name ) );} now requires additional forward quotes: {type(z+x+y, '`+`'(name) );}.

•

Angle bracket functions: {<f>} has a different meaning (see above).

•

Plots of a list now mean multipleplots instead of a point plots. The functionality that used to be provided by {plot([x1,y1, ..., xn,y1])} is now obtained by stating explicitly the pairs of points {plot( [[x1,y1], ..., [xn,yn]] )}. The reason for this change is to be able to give specific options for each subplot; for example, one can specify a list of colors.



Error checking:


•

It is now an error to have duplicate globals, locals and argument names. Maple now gives error messages for the following examples:

>

proc(x) global y,y; end;

Error, global `y` is declared more than once



>

proc(x) local y,y; end;

Error, local `y` is declared more than once



Error, parameter and global `y` have the same name



•

The following variables are now protected:

<>

=

real

algext

algfun

algnum

algnumext

arctrig

array

complex

cubic

even

evenfunc

expanded

facint

infinity

intersect

laurent

linear

listlist

mathfunc

matrix

minus

monomial

negative

negint

nonneg

nonnegint

nothing

odd

oddfunc

PLOT

PLOT3D

point

polynom

posint

positive

prime

quadratic

quartic

radext

radfun

radfunext

radnum

radnumext

ratpoly

realcons

realcons

RootOf

scalar

sqrt

square

symmfunc

taylor

trig

type

union

vector







System changes:


•

Name protection is no longer removed by unassignment. Given protect(n); one used to be able to remove the protection using n:='n'; This is no longer possible. The mechanism to be used is unprotect(n). This is because name protection is implemented using attributes. See also attributes.

•

List addition is now active. It used to be that [1,2]+[20,30] remained unchanged. Now the addition will be performed.

$\left[{21}{\,}{32}\right]$
 (1) 

Because of this, the data structure for padic and evalr have been changed.

>

with(padic): lprint(cosp(3,3));

${\mathrm{PADIC}}{}\left({\mathrm{p\_adic}}{}\left({3}{\,}{0}{\,}\left[{1}{\,}{0}{\,}{1}{\,}{0}{\,}{2}{\,}{0}{\,}{1}{\,}{2}{\,}{1}{\,}{1}\right]\right)\right)$
 (2) 

It used to give "PADIC([3, 0, [1, 0, 1, 0, 2, 0, 1, 2, 1, 1]])". See also padic. The data structure for evalr used to be [a..b], [x,a..b], [a..b,c..d, ...] and so on. It is now INTERVAL(a..b), INTERVAL(x,a..b), INTERVAL(a..b, c..d, ...), ...

•

Some userinfo messages can appear because infolevel[hints] has the value 1 by default. One can set infolevel[hints] to 0 to avoid these messages.

•

The functions words() and gc(num) have been superseded by the kernelopts() function. The function gc() remains, and will still perform a garbage collection upon evaluation. The function words() is removed entirely.


The internal representation of Maple objects has changed in some cases. This can affect code involving the hackware package.

•

The end of line no longer terminates the input to the readstat function. One needs to terminate the input with a semicolon. This is to allow multiline statement input. The I/O library and the readline and the parse function can be used to recover the previous behavior. See readstat, readline and iolib.

•

The status variable has been removed. Its functionality is in the kernelopts function.

status[1]

>

kernelopts(bytesused)

status[2]

>

kernelopts(bytesalloc)

status[3]

>

kernelopts(cputime)

status[4]

>

no equivalent, is related to kernelopts(printbytes)

status[5]

>

kernelopts(gcfreq)

status[6]

>

kernelopts(gcwordsreturned)

status[7]

>

kernelopts(gcwordsavail)

status[8]

>

kernelopts(gctimes)



•

The functionality of {interface(endcolon)} is now in {parse()}, with no arguments. See parse.



Deletions:


•

The %i format for printf() has been deleted.

•

The name E no longer has any special meaning (it used to mean the constant 2.718...). Most of the time, alias(E=exp(1)) can be used to update Release 3 code. Be aware that some simplifications will be different and that type(exp(1),name) is false.


The bianchi, geom3d, projgeom, and oframe packages have been removed.

•

The function write() has been deleted since it has been superseded by the IO library. See iolib.



Name changes:


•

We replaced define(linear(...)) by define(Linear(...)) because of the new type(.., linear). See define and type/linear.

•

The financial functions readlib(finance) have been superseded by a finance package.

•

Because of the new top level function remove, the function stats[transform,remove] has been renamed stats[transform, subtractfrom]. The new name has been chosen by analogy to the name stats[transform, divideby]. See transform[subtractfrom]

•

The Gauss package was renamed to Domains, to avoid confusion with a different software of the same name, marketed by another vendor.

•

The type(..., prime) construct has been renamed type(..., primeint).

•

The function W() has been renamed LambertW().



Useful idioms:


•

The add() function replaces effectively the construction convert( ..., `+`). Similarly mul() should be used instead of convert( ..., `*`). These functions are similar to the functions: sum() and product(), which provide *symbolic* sums and products.



Mathematical changes:



The branch cut definitions for BesselJ, Ci have changed.


RootOf's are denested if possible.


Function composition of the form trigh@ln now automatically simplify.


