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 multiple-plots 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 sub-plot; 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.
|
|
Because of this, the data structure for padic and evalr have been changed.
|
>
|
with(padic): lprint(cosp(3,3));
|
| (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 semi-colon. This is to allow multi-line 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.
|
|
|