Language and Programming - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim

Home : Support : Online Help : System : Information : Updates : Maple 18 : Language and Programming

Language and Programming


Maple 18 includes the following enhancements to the Maple language and programming facilities:


New URL Package

New InertForm Package

Compiler Run-time Library

Random Tools

Improvements to the sort Command

String Tools

Improvements to the Code Editor

Interface and Kernelopts

New Option "indexorder" for Entries and Indices

New URL Package

A new URL package has been added to enable downloading and uploading data across networks. The URL package supports the http, https, and ftp protocols. This package extends the functionality previously available through the HTTP package.

New InertForm Package

The InertForm package gives you tools to prevent simplification and evaluation so that you can examine and work with exactly what was entered.


For details, see the InertForm in Maple 18 page.

Compiler Run-time Library

In Maple 18, the compiler run-time library was made thread-safe. The result is that an already-compiled procedure that is thread-safe can be run in multiple threads.  

To do this, add `option threadsafe` to the procedure before compiling it, so that the compiler knows that the procedure is thread-safe. Note that adding this option does not make anything thread-safe in itself. It is the responsibility of the code author to ensure that their procedure is writen in a thread-safe way; this option simply informs the compiler that the authored code is thread-safe.

For more information, see Procedure Options and Compiler:-Compile.

Random Tools

You can now generate random matrices and vectors using the RandomTools package by using the new flavors Matrix and Vector.  When generating matrices and vectors of floats and integers, these flavors are very fast.

In addition, the list flavor has been updated to generate lists of integers and floats much faster than in previous versions of Maple.


RandomTools:-Generate 'Matrix'integer,5,5 ;

RandomTools:-Generate 'Matrix' polynom integer range=0..1, x, degree=10 , 4, 4  ;

RandomTools:-Generate 'Vector'float, 10, datatype=float8  ;

RandomTools:-Generate 'Vectorrow' floatdigits=4, integerrange=5..10  ;

timereal RandomTools:-Generate list integer, 106   ;



In previous versions of Maple, this takes more than 5 seconds to complete.

Improvements to the sort Command

Improvements to the sort command in Maple 18 offer faster sorting through automatic parallel execution and new key sorting, as well as guaranteed stable sorting.

Parallel Sort

In Maple 18, the sort command takes advantage of multiple cores. The following graph shows the timing difference between sorts of random permutations run in Maple 17 and Maple 18.

Parallel sorting is used for all of Maple's built-in sort algorithms, automatically taking advantage of all of the cores available on your computer. When a custom comparison function is given, sort will perform the operation in serial.

Key Sorting

Maple 18 adds support for key sorting.  Key sorting allows users to specify a function to map elements to keys. The input is then sorted by sorting the corresponding keys. For example, the following list of lists can be sorted by comparing the first element of each sublist.


sort  9, 4, 7, 2, 5, 8, 3, 6, 1 ,key=xx1 ;




In previous versions of Maple, this could be achieved by using a custom comparison function. Key sorting is faster because it only requires that the key function be called O(n) times, whereas a comparison function will be called O(n*log(n)) times. In addition, by performing the underlying sort operation with the default Maple comparison function, sorting can be performed in parallel.

The following example shows the timing difference (in seconds) between sorting with a comparison function and a key function.


L   seq i, i in combinat:-randperm 3105   :

timereal sort L, x,yx1  y1  ;



timereal sort L, key=xx1  ;



Stable Sorting

The Maple 18 sort function is now stable.  A stable sort function guarantees that equal elements are left in the same relative order in the output as in the input. This is most meaningful when sorting using a custom comparison function or a key sorting function. The following list is sorted according to the first element in the list. The lists whose first elements are equal end up in the same relative order (as shown by the second element) as specified in the input list.


sort1, 1, 2, 1, 3, 1, 1, 2, 2, 2, 3, 2, 1, 3, 2, 3, 3, 3, x, yx1  y1 ;




Stable sorting is available for all built-in Maple sort algorithms and any custom comparison function that follows the guidelines outlined in the sort documentation. By default, the comparison function must be a non-strict (less than or equal to) comparison function. To use a strict (less than) comparison function, one must specify that using the strict option.


sort  1&comma;1&comma; 2&comma;1&comma; 3&comma;1&comma; 1&comma;2&comma; 2&comma;2&comma; 3&comma;2&comma; 1&comma;3&comma; 2&comma;3&comma; 3&comma;3 &comma;strict&equals;x&comma;yx1<y1 &semi;




String Tools

There are three new commands in the StringTools package:


DifferencePositions: Convert a string to a list of characters.


IsDerangement: Test whether a string is a derangement of another string.


Snarf: Extract a prefix consisting of specified characters from a string.


StringTools:-DifferencePositions edit&comma; tide 



StringTools:-IsDerangement edit&comma; tide 



StringTools:-SnarftiDE&comma; &apos;lower&apos;&semi;



Improvements to the Code Editor

Some usability improvements have been made to the Code Editor. For details, see Embedded Component Enhancements.

Interface and Kernelopts

A new interface variable, worksheetdir, returns the path to the directory of the active worksheet. For details, see interface.

Two new kernel options, gctotaltime and gctotaltime[real], return the total amount of time spent performing garbage collection in CPU time and real time. For details, see kernelopts.

New Option "indexorder" for Entries and Indices

The entries and indices procedures accept a new option, indexorder.  The indexorder option causes the returned elements to be sorted by the values of the index. This is most useful for the entries command, where one wants the the entires of a table sorted based on the indices of the table. For example


t  table 1.&equals;one&comma; 2. &equals; two&comma;3.&equals;three&comma; 4. &equals; four&comma; 5.&equals;five&comma; 6.&equals;six&comma; 7. &equals; seven&comma; 8.&equals;eight&comma; 9.&equals;nine&comma; 10.&equals;ten &semi;









See Also

What's New in Maple18