<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) ????-2008 - INRIA
 *
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="en" xml:id="macro">
    <refnamediv>
        <refname>macro</refname>
        <refpurpose>Scilab procedure and Scilab object</refpurpose>
    </refnamediv>
    <refsection>
        <title>Description</title>
        <para>
            Macros are Scilab procedures ("macro", "function" and "procedure"
            have the save meaning). Usually, they are defined
            in files with an editor and loaded into Scilab by <function>exec</function> or through
            a library.
        </para>
        <para>
            They can also be defined on-line (see <link linkend="deff">deff</link>).
            A file which contains a macro must begin as follows:
        </para>
        <programlisting role='no-scilab-exec'><![CDATA[
function [y1,...,yn]=foo(x1,...,xm)
 ]]></programlisting>
        <para>
            The <literal>yi</literal> are output variables calculated as functions of
            input variables and variables existing in Scilab
            when the macro is executed.
            A macro can be compiled for faster execution. Collections
            of macros can be collected in libraries.
            Macros which begin with <literal>%</literal> sign (e.g. <literal>%foo</literal>) and whose
            arguments are lists are used to perform specific
            operations: for example, <code>z=%rmr(x,y)</code> is equivalent
            to <code>z=x*y</code> when <varname>x</varname> and <varname>z</varname> are rationals
            (i.e. <code>x=list('r',n,d,[])</code> with <varname>n</varname> and <varname>d</varname> polynomials).
        </para>
    </refsection>
    <refsection role="see also">
        <title>See also</title>
        <simplelist type="inline">
            <member>
                <link linkend="deff">deff</link>
            </member>
            <member>
                <link linkend="exec">exec</link>
            </member>
            <member>
                <link linkend="lib">lib</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
