Funciones personalizadas

Ya se ha comentado que en el lenguaje M tenemos a nuestra disposición un conjunto de funciones estándar (las proveídas por la llamada "librería estándar"), pero que también podemos crear nuestras propias funciones: las llamadas funciones personalizadas.

La estructura de una función personalizada es la siguiente:

(valores de entrada) => expresión

donde valores de entrada es un conjunto de valores (argumentos) separados por comas y sobre los cuales se va a aplicar la función, y expresión representa las operaciones a aplicar a dichos argumentos para calcular el valor de salida. Un ejemplo de función es la siguiente:

(x, y) => x + y

Esta función involucra dos argumentos, x e y, y una expresión que devuelve la suma de ambos valores (x + y).

Tal y como está escrita se trata de una función anónima (pues no tiene un nombre asignado), pero podemos almacenarla en una variable de forma que la función sea accesible a través de dicha variable. En este caso podemos decir que estamos asignando a la función un nombre:

Suma = (x, y) => x + y

Una vez asignada a un nombre, es posible hacer referencia a ella de la siguiente forma:

Suma(2, 6)

Apliquemos esto en una consulta M:

let
    Suma = (x, y) => x + y,
    a = {
        Suma(1, 1),
        Suma(2, 2)
    }
in
    a

Definición de una función

Como vemos, la función es definida en la primera fórmula de paso, y en la segunda fórmula de paso se invoca dicha función dos veces para devolver una lista.

Como hemos visto ya, las funciones también son valores con un tipo especial asignado (el tipo function).