Funktionale Programmierung mit JSL, jemand?Schreibt jemand JSL mithilfe funktionaler Programmierung, und wenn ja, verfügen Sie über einen Standardsatz an Funktionen, die Sie verwenden?
Als Beispiel übernimmt die vereinfachte Kartenfunktion unten die gesamte Arbeit einer for-Schleife, sodass Sie nur einen Ausdruck und eine Liste angeben müssen und die Funktion eine Liste zurückgibt, in der die Funktion für jedes Element ausgewertet wird. In R finden sich eine ähnliche Funktion und Varianten davon im Paket 'schnurren' von Lionel Henry und 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 ) ) ) );
Betreff: Funktionale Programmierung mit JSL, jemand?Vielen Dank 
Verwandeln Sie jeden.
Betreff: Funktionale Programmierung mit JSL, jemand?In JMP 16 wurden drei Funktionen eingeführt, die dies mit nativen Funktionen ermöglichen. Sie fühlen sich anders an als andere Sprachen, sind aber genauso „funktional“ (lacht über mein eigenes Wortspiel):
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
Weitere Informationen zu diesen Funktionen finden Sie in dieser Hilfedatei:
https://www.jmp.com/support/help/en/17.1/index.shtml#page/jmp/conditional-and-logical-functions.shtml#ww10169888
Betreff: Funktionale Programmierung mit JSL, jemand?Gibt es in der Zwischenzeit eine Karte Funktion jetzt direkt in Jmp verfügbar?
Sooo nützlich!
https://reference.wolfram.com/sprache/ref/Map.html
Betreff: Funktionale Programmierung mit JSL, jemand?Ich muss etwas Zeit mit Ihrer Bibliothek verbringen, da diese Funktionen etwas anders funktionieren, als ich es gewohnt bin, aber das ist großartig und vielen Dank fürs Teilen!Zweifellos haben Sie mir gerade eine Menge Zeit gespart!
Betreff: Funktionale Programmierung mit JSL, jemand?Komisch, dass Sie gefragt haben. Ich habe so etwas vor ein paar Monaten implementiert und dachte damals, es könnte für andere nützlich sein. Ich habe es gerade hier veröffentlicht: https://community.jmp.com/t5/JMP-Scripts/MFR-a-Functional-Programming-Library-for-JSL/ta-p/47803
Ich hoffe, Sie finden es nützlich.
Übrigens verwende ich lieber anonyme Funktionen als Ausdrücke, obwohl ich je nach dem Problem, das ich lösen wollte, zwischen ihnen wechseln musste.
Betreff: Funktionale Programmierung mit JSL, jemand?Die gespeicherte if-Funktion ist ein bisschen ein Cheat, weshalb ich sie an zweiter Stelle aufgeführt habe. Die Funktion analysiert die Liste, um die if-Anweisung zu generieren, und schreibt dann diese JSL in eine Datei, die dann in das Programm eingebunden wird.
Ich habe eine Funktion ausprobiert, die die if-Anweisungen im Handumdrehen erstellt, aber der Leistungseinbruch war enorm und mir wurde klar, dass der Code ziemlich statisch war, sodass es einfacher war, die generierte if-Funktion zu speichern und sie dann zu verwenden.Betreff: Funktionale Programmierung mit JSL, jemand?Wie übergeben Sie den auszuwertenden Code an Ihre gespeicherte if-Funktion?Heute verwende ich beide Ausdrücke oder Funktionen, habe aber vor, in Zukunft auf einen Satz zu standardisieren.
Eine Beispielkartenfunktion, die eine andere Funktion auswertet:
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 ) );Betreff: Funktionale Programmierung mit JSL, jemand?Ich habe diesen Ansatz verwendet und verfüge über Funktionen zum Generieren dynamischer Journale aus einer Datentabelle, zum Konvertieren einer Tabelle in verschachtelte Listen und zurück und zum Generieren von UI-Dialogfenstern.
Ich habe JSL auch verwendet, um komplexe Funktionen zu schreiben, die ich häufig verwende (Liste der Bedingungen, Zustandsänderungen bei wahr und Zustandsänderungen, wenn sie nicht mehr wahr sind (optional)), da ich es satt hatte, meine Tippfehler zu debuggen.