.NH 1 A ``startup'' function in \*a? .PP \*a has a startup facility which allows automatic execution of an \*a expression when a workspace is loaded. If you define the variable ``\*(qdlx'' to be some \*a expression and then save the workspace, when you next ``)load'' the workspace, \*a will automatically read and execute ``\*(qdlx''. For example, if you have the function ``hello'' which looks like this: .DS hello [1] \'hi there, my friend\' [2] \'welcome to apl\' .DE and you want \*a to perform ``hello'' when you load the workspace file ``hi'', you can say: .DS L \*(qdlx { \'hello\' )save hi 14.59.31 10/26/78 saved hi )off .DE Then, if you run \*a with: .sp $ apl hi .sp you will get: .DS L a p l \\\\ 1 1 25 oct 1978 14.59.31 10/26/78 loaded hi hi there, my friend welcome to apl \_ .DE .NH 1 \*u \*a\\11 Limitations .PP \*u \*a does have some limitations. Tracing, which is controlled by the ``)trace'' and ``)untrace'' commands, is not compatible with the standard \*a trace facility. .PP Some operators have not been implemented (for example, laminate is not supported). Dyadic format is available in a restricted form: the left argument cannot be a scalar or one-element vector and negative precision (``E format'') is not permitted. There is a function /usr/lib/apl/fn/dft which performs dyadic format according to the standard definition. Inner and outer product will not work with character data. .PP Functions which are created with ``\*(qdfx'' should not have the same name as existing variables; occasionally \*a gets confused and mistakenly zaps a newly-fixed function. Functions containing overstrikes that were created by ``\*(qdfx'' cannot be properly edited. The only quad variable which has been implemented is ``\*(qdlx'', and it is always a global variable. .PP The biggest limitation for PDP-11 \*u \*a is space. Despite efforts to use as much memory as \*u and the computer itself permit, only about 5000 numeric values may be stored in an \*a workspace. In order to permit workspaces containing more data, there is a second version of \*u \*a called ``apl2''. \*(a2 is used exactly the same way as \*a \(em the only difference is that it uses single precision floating-point instead of double-precision. As a result, some precision is lost, but \*(a2 allows twice as many workspace items as \*a. Although \*(a2 and \*a workspaces are in different formats, \*a and \*(a2 will convert each other's workspace files they are loaded with ``)load'' or merged with ``)copy'', so workspaces may be used interchangably. In all other respects, the operation of \*(a2 is identical to the operation of \*a. (On the VAX 11/780, the size of the workspace is essentially limited only by the virtual memory system. Hence, \*(a2 provides no real advantage over \*a). .PP Finally, an unfortunate restriction in using \*a on both PDP-11's and VAX-11/780's is that workspaces are not directly interchangeable between machines. However, there is a program to convert them. To convert a PDP-11 workspace to the VAX, run (on the VAX) the command: .DS $ aplcvt filename .DE The workspace will be converted to VAX format and placed into the file ``filename.vax''. Similarly, you can convert VAX format workspaces to PDP-11 format by running ``aplcvt'' on a PDP-11. (There are other options available; for a description of these see the online manual by typing .DS $ help aplcvt $ man aplcvt .DE .NH 1 Conclusion .PP Well, that wraps up this manual. Reference information about \*a is found in the online manual. Type: .DS $ help apl $ man apl .DE for the online document. Good luck with \*a!