Programmation fonctionnelle avec JSL, ça vous tente ?Est-ce que quelqu'un écrit du JSL en utilisant la programmation fonctionnelle, et si oui, disposez-vous d'un ensemble standard de fonctions que vous utilisez ?
À titre d'exemple, la fonction map simplifiée ci-dessous fait tout le travail d'une boucle for, il vous suffit donc de spécifier une expression et une liste et la fonction renvoie une liste avec la fonction évaluée pour chaque élément. Dans R, une fonction similaire et des variantes de celle-ci peuvent être trouvées dans le package 'ronronner' par Lionel Henry et 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 : Programmation fonctionnelle avec JSL, ça vous tente ?Merci beaucoup 
Transformez chacun.
Re : Programmation fonctionnelle avec JSL, ça vous tente ?Dans JMP 16, trois fonctions ont été introduites pour faciliter cela avec des fonctions natives. Ils semblent différents des autres langages mais sont tout aussi « fonctionnels » (en riant de mon propre jeu de mots) :
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
Trouvez plus d'informations sur ces fonctions dans ce fichier d'aide :
https://www.jmp.com/support/help/en/17.1/index.shtml#page/jmp/conditional-and-logical-functions.shtml#ww10169888
Re : Programmation fonctionnelle avec JSL, ça vous tente ?En attendant, y a-t-il un carte fonction désormais directement disponible dans Jmp ?
Tellement utile !
https://reference.wolfram.com/langue/ref/Map.html
Re : Programmation fonctionnelle avec JSL, ça vous tente ?J'ai besoin de passer un peu de temps avec votre bibliothèque car ces fonctions fonctionnent un peu différemment de ce à quoi je suis habitué mais c'est génial et merci pour le partage !Nul doute que vous m’avez fait gagner beaucoup de temps !
Re : Programmation fonctionnelle avec JSL, ça vous tente ?C'est drôle que vous ayez demandé, j'ai implémenté quelque chose comme ça il y a quelques mois et j'ai pensé à l'époque que cela pourrait être utile à d'autres. Je viens de le publier ici : https://community.jmp.com/t5/JMP-Scripts/MFR-a-Functional-Programming-Library-for-JSL/ta-p/47803
J'espère que tu trouves cela utile.
BTW, je préfère utiliser des fonctions anonymes plutôt que des expressions, même si j'ai dû basculer entre elles en fonction du problème que j'essayais de résoudre.
Re : Programmation fonctionnelle avec JSL, ça vous tente ?La fonction if stockée est un peu une triche, c'est pourquoi je l'ai répertoriée en deuxième position. La fonction analyse la liste pour générer l'instruction if, puis écrit ce JSL dans un fichier qui est ensuite inclus dans le programme.
J'ai essayé une fonction créant les instructions if à la volée, mais les performances ont été énormes et j'ai réalisé que le code était assez statique, il était donc plus facile de stocker la fonction if générée, puis de l'utiliser.Re : Programmation fonctionnelle avec JSL, ça vous tente ?Comment transmettre le code à évaluer à votre fonction if stockée ?Aujourd'hui, j'utilise à la fois des expressions ou des fonctions, mais je prévois de standardiser sur un seul ensemble à l'avenir.
Un exemple de fonction map qui évalue une autre fonction :
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 : Programmation fonctionnelle avec JSL, ça vous tente ?J'ai utilisé cette approche et j'ai des fonctions pour générer des journaux dynamiques à partir d'une table de données, convertir une table en listes imbriquées et inversement et générer des fenêtres de dialogue d'interface utilisateur.
J'ai également utilisé JSL pour écrire des fonctions if complexes que j'utilise beaucoup (lister les conditions, les changements d'état sur vrai et les changements d'état lorsqu'ils ne sont plus vrais (facultatif)), car j'en avais marre de déboguer mes fautes de frappe.