Programación funcional con JSL, ¿alguien?¿Alguien escribe JSL usando programación funcional y, de ser así, tiene un conjunto estándar de funciones que utiliza?
Como ejemplo, la función de mapa simplificada a continuación hace todo el trabajo de un bucle for, por lo que solo necesita especificar una expresión y una lista y la función devuelve una lista con la función evaluada para cada elemento. En R, se puede encontrar una función similar y variantes de la misma en el paquete 'ronroneo' por Lionel Henry y Hadley Wickham.
// A function to evaluate an expression for each item in a list
//
// x__ A list
// fn__ An expression containing ___ (three underscores) that
// is replaced with each element of x__
//
// Returns a list the same length as x__.
//
map = function( {x__, fn__},
r__ = {};
for(i__ = 1, i__ <= N items( x__ ), i__++,
r__ = Insert( r__, Eval( substitute(Name Expr( fn__ ), Expr(___), Expr( x__[i__] ) ) ) );
);
return(r__);
);
//Data to evaluate
vals = { 1, 2, 3, -3, -2, 0.5, -1.1, 5.3, 2.7, 0 };
//number of entries above zero
map( vals, Expr( ___ > 0 ) );
//sum of fractional parts
sum( map( vals, Expr( Mod( ___, 1 ) ) ) );
Re: Programación funcional con JSL, ¿alguien?Muchas gracias 
Transforma cada uno.
Re: Programación funcional con JSL, ¿alguien?En JMP 16 se introdujeron tres funciones que facilitan esto con funciones nativas. Se sienten diferentes a otros lenguajes pero son igual de "funcionales" (riéndose de mi propio juego de palabras):
For Each() //Do something for each member - similar to apply
Transform Each() //Calculate something for each member - similar to map
Filter Each() //Return members for which a condition is true - similar to filter
Encuentre más información sobre estas funciones en este archivo de ayuda:
https://www.jmp.com/support/help/en/17.1/index.shtml#page/jmp/conditional-and-logic-functions.shtml#ww10169888
Re: Programación funcional con JSL, ¿alguien?Mientras tanto, ¿hay alguna mapa ¿La función ahora está disponible directamente en Jmp?
¡Muy útil!
https://reference.wolfram.com/language/ref/Map.html
Re: Programación funcional con JSL, ¿alguien?Necesito pasar algo de tiempo con tu biblioteca ya que estas funciones funcionan un poco diferente a lo que estoy acostumbrado, pero esto es genial y ¡gracias por compartir!¡Sin duda me acabas de ahorrar mucho tiempo!
Re: Programación funcional con JSL, ¿alguien?Es curioso que lo preguntes, implementé algo así hace unos meses y en ese momento pensé que podría ser útil para otros. Lo acabo de publicar aquí: https://community.jmp.com/t5/JMP-Scripts/MFR-a-Functional-Programming-Library-for-JSL/ta-p/47803
Espero que le sea útil.
Por cierto, prefiero usar funciones anónimas en lugar de expresiones, aunque tuve que cambiar entre ellas dependiendo del problema que intentaba resolver.
Re: Programación funcional con JSL, ¿alguien?La función if almacenada es un poco engañosa, por eso la mencioné en segundo lugar. La función analiza la lista para generar la declaración if y luego escribe ese JSL en un archivo que luego se incluye en el programa.
Probé una función que creaba declaraciones if sobre la marcha, pero el impacto en el rendimiento fue enorme y me di cuenta de que el código era bastante estático, por lo que era más fácil almacenar la función if generada y luego usarla.Re: Programación funcional con JSL, ¿alguien?¿Cómo se pasa el código para ser evaluado a su función if almacenada?Hoy uso ambas expresiones o funciones, pero planeo estandarizar un conjunto en el futuro.
Una función de mapa de ejemplo que evalúa otra función:
map = function( {x, fn},
r = {};
for(i = 1, i <= N items( x ), i++,
r = Insert( r, fn( x[i] ) );
);
return(r);
);
//Anonymous function
map({1, 2, 3}, function({n}, n/2));
//Named function
foo = function( {v}, v * 2 );
map({1, 2, 3}, Expr( foo ) );Re: Programación funcional con JSL, ¿alguien?He utilizado este enfoque y tengo funciones para generar diarios dinámicos a partir de una tabla de datos, convertir una tabla en listas anidadas y viceversa y generar ventanas de diálogo de interfaz de usuario.
También he usado JSL para escribir funciones complejas que uso mucho (enumerar las condiciones, cambios de estado en verdadero y cambios de estado cuando ya no es verdadero (opcional)), ya que me estaba cansando de depurar mis errores tipográficos.