Язык MGL достаточно простой. Каждая строка – отдельная команда. Первое слово – имя команды, а все остальные ее аргументы. Команда может иметь до 1000 аргументов (по крайней мере сейчас). Слова разделяются одно от другого пробелом или символом табуляции. Различий между верхним и нижним индексом нет, т.е. переменные a и A идентичны. Символ ‘#’ начинает комментарий – все символы после него игнорируются до конца строки. Исключением является случай, когда ‘#’ входит в строку. Опции команды указываются после символа ‘;’ (see Опции команд). Символ ‘:’ начинает новую команду (подобно переводу строки) если он расположен не внутри скобок или строки.
Если строка содержит ссылки на внешние параметры (‘$0’, ‘$1’ ... ‘$9’) или макроопределения (‘$a’, ‘$b’ ... ‘$z’), то текущие значения параметров/макроопределений подставляются в строку вместо ссылки до выполнением команды. Это позволяет использовать один и тот же скрипт при различных входных параметрах командной строки или вводить макроопределения по ходу исполнения команд скрипта.
Аргументы команды могут быть строками, переменными или числами.
'b'
);
'abf'
).
new x 100 'x':copy !b !exp(1i*x)
создаст массив действительных чисел x и массив комплексных чисел b, который будет равен exp(I*x), где I^2=-1.
В качестве переменной можно использовать также и временные массивы, включающие в себя:
a(1)
или a(1,:)
или a(1,:,:)
– вторая строка массива a, a(:,2)
или a(:,2,:)
– третий столбец, a(:,:,0)
– первый срез и т.д. Также можно выделить часть массива с m-го по n-ый элемент a(m:n,:,:)
или просто a(m:n)
.
a('n*w^2/exp(t)')
), если столбцы данных были именованы командой idset или в файле данных (в строке начинающейся с ##
).
tmp[i,j] = sqrt(dat[i,5,j]+1)
. При этом символ ‘`’ возвращает транспонированный массив: ‘`sqrt(dat(:,5)+1)’ и ‘sqrt(`dat(:,5)+1)’ оба дадут временный массив данных с элементами равными tmp[i,j] = sqrt(dat[j,5,i]+1)
.
Временные массивы не могут стоять в качестве первого аргумента команд, создающих массивы (например, ‘new’, ‘read’, ‘hist’ и т.д.).
nan=#QNAN, inf=бесконечность, rnd=случайное число, pi=3.1415926..., on=1, off=0, all=-1, :=-1
, переменные с суффиксами (see Информационные функции), переменные определенные командой define, значения времени (в формате "hh-mm-ss_DD.MM.YYYY", "hh-mm-ss" или "DD.MM.YYYY") . Также массивы размером 1x1x1 считаются скалярами (например, ‘pi/dat.nx’).
Перед первым использованием все переменные должны быть определены с помощью команд, создающих массивы (new, var, list, copy, read, hist, sum и др., см. Создание и удаление данных, Заполнение данных и Make another data).
Команды могут иметь несколько наборов аргументов (например, plot ydat
и plot xdat ydat
). Все аргументы команды для выбранного набора должны быть указаны, однако часть из них могут иметь значения по умолчанию. Такие аргументы в описании команд будут помещены в квадратные скобки [], например plot ydat ['stl'='' zval=nan]
. При этом запись [arg1 arg2 arg3 ...]
подразумевает [arg1 [arg2 [arg3 ...]]]
, т.е. опускать можно только аргументы с конца, если вы согласны с их значениями по умолчанию. Например, plot ydat '' 1
или plot ydat ''
правильно, а plot ydat 1
не правильно (аргумент 'stl'
пропущен).
Можно предоставить несколько вариантов аргументов комманд при использовании символа ‘?’ для их разделения. Конкретный вариант аргумента, используемый при выполнении команды, задается значением команды variant. При этом будет использован последний вариант, если задано слишком большое значение. По умолчанию используется первый вариант (т.е. как при variant 0
). Например в следующем коде будет сначала нарисован график синим цветом (первый аргумент ‘b’), а затем красным пунктиром – после variant 1
будет использован второй аргумент ‘r|’:
fplot 'x' 'b'?'r' variant 1 fplot 'x^3' 'b'?'r|'