For a thorough listing of the M language commands, operators, functions and special variables, see MUMPS by Example
One of M implementations available as open source is GTM from FIS, we can download it from http://sourceforge.net/projects/fis-gtm/. The documentation is available from here
Setup a environment to start some test is fairly simple, just unzip the downloaded file, run configure and answer few questions, then we can start
setting env. for running GTM
$source ./gtmprofileThis shell will set various env, variables required by GTM also create a global directory and a default datafile, that is actually M database. M is a language with built in persistence. The global directory is kind of control file in Oracle.
start gtm - the interpreter
$gtm GTM> GTM>write "hello world" hello world GTM>haltM use
write
command to output some thing to a console, in Ruby we would use puts
in Python, this is print
.
The command halt
is used to quit the gtm.
For a beginner of any language, the ability to write something out to see and to exit are the two most important commands.
string and numbers
String is enclosed by " as in C, Java, Python, Ruby, to concatenate two or more string we use operator
_
, not that common any more.
GTM>set x="hello" GTM>set y="world" GTM>set z=x_" "_y GTM>write z hello worldThe command
set
set these local variables, these variables are created automatically if not exist.
GTM>set a=10 GTM>set b=20 GTM>set c=(a+b)*5/10 GTM>write c 15For number, this is quite straightforward, no surprise.
create and run the first program
$export gtmroutines=/home/gtm/samples $source ./gtmprofile $gtm GTM>write $ZROutines /home/gtm/samplesthis
gtmroutines
env. variable specifies where GTM is going to store and search for its routines, inside GTM however it is kept in variable $ZROutines
. The concept routine in GTM is synonym for a single file containing M code.
GTM>zedit "hello"This will popup a vi editor with opened file
/home/gtm/samples/hello.m
. Create the following content, save and quit vi editor.
hello(who) write "Hello ",who,! quitIn the routine
hello.m
we see a label hello(who)
, which is calling entry point. GTM's routine can have many labels and the general syntax of calling a section of code in the routine is label^routine
.
The label hello
will take one parameters. The write
above command takes 3 parameters separated by comma where !
means new line. It is possible to write the above code in a single line
hello(who) write "Hello ",who,! quitThe
quit
at the end is important in case other labels are added below if we want a label to behave as a function, which mean that the execution flow in the routine terminates at quit
command .
GTM> zlink "hello"The
zlink
compiles and link hello.m
to GTM image so we can call this routine in GTM environment
GTM>do hello^hello("Moon") Hello MoonIf we do not specify a label then the code will be executed from the first line.
GTM>do ^hello("World") Hello WorldIf we look closely to
gtm
, we will see that gtm
is shell script that call the binary mumps
in direct mode (with parameter -direct
).
We can run the routine
hello.m
from command line as follow
$export gtmroutines="/home/gtm/samples/ ." $mumps -run %XCMD 'do ^hello("World")'The
%XCMD
is in fact a routine _XCMD.m
located in distribution directory of GTM, that is why we need add "." into gtmroutines
env. variables, so mumps
knows where to find the files being executed.
language syntax
M syntax is very strict, SPACE characters between M statements are significant. A single space separates a command from its argument, COMMA "," is used to separate one argument from other of these commands taking more than one arguments.
A SPACE, or newline, separates the command's arguments from others. Commands which take no arguments (e.g., ELSE) require two following spaces.
Character
;
is used to indicate start of a comment, that runs until end of line.
GTM>write "hello"; two SPACES after write %GTM-E-EXPR, Expression expected but not found write "hello" ^----- GTM>write "hello"; single SPACE after write hello GTM>set x=1,y=2 write "x=",x,",y=",y !set and write commands are on the same line separated by SPACE x=1,y=2 GTM>set x=1 + 2; SPACE surrounding + %GTM-E-CMD, Command expected but not found set x=1 + 2 ^----- GTM>set x=1+2; no SPACE in expression GTM>write x 3 GTM>set x= 9 ; SPACE after = %GTM-E-EXPR, Expression expected but not found set x= 9 ^----- GTM>set x=9; no SPACE after= GTM>write x 9Math expression
Comparing to other language, math operator has no order precedences, a expression is evaluated from left to right
GTM>write 1+2*3 9 GTM>write (1+2)*3 9Parentheses has to be used to make thing work as expecting.
GTM>write 1+(2*3) 7
1 comment:
Nice information about M language coding.
you explained basic of M language.
Thanks for sharing.
Mumps Support
Post a Comment