JSL を使用した関数型プログラミング、誰かいますか?関数型プログラミングを使用して JSL を作成する人はいますか?もしいる場合、使用する標準関数セットはありますか?
例として、以下の簡略化されたマップ関数は for ループのすべての作業を実行するため、式とリストを指定するだけで、関数は各要素に対して評価された関数を含むリストを返します。 R では、同様の関数とそのバリアントがパッケージにあります。 「ゴロゴロ」ライオネル・ヘンリーとハドリー・ウィッカム著。
// 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: JSL を使用した関数型プログラミング、誰かいますか?どうもありがとう :)
それぞれを変換します。
Re: JSL を使用した関数型プログラミング、誰かいますか?JMP 16 では、ネイティブ関数でこれを容易にする 3 つの関数が導入されました。 これらは他の言語とは異なるように感じられますが、同じように「機能的」です (自分のダジャレで笑います)。
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
これらの関数の詳細については、次のヘルプ ファイルを参照してください。
https://www.jmp.com/support/help/en/17.1/index.shtml#page/jmp/conditional-and-logical-functions.shtml#ww10169888
Re: JSL を使用した関数型プログラミング、誰かいますか?その間、何かありますか?地図関数は Jmp で直接利用できるようになりましたか?
とても便利です!
https://reference.wolfram.com/ language/ref/Map.html
Re: JSL を使用した関数型プログラミング、誰かいますか?これらの関数は私が慣れているものとは少し異なる動作をするため、ライブラリに少し時間を費やす必要がありますが、これは素晴らしいものです。共有してくれてありがとう!間違いなく、あなたのおかげでかなりの時間が節約できました。
Re: JSL を使用した関数型プログラミング、誰かいますか?おかしな質問ですが、私は数か月前に同じようなものを実装しましたが、その時は他の人にとって役立つかもしれないと考えていました。 ここで公開しました: https://community.jmp.com/t5/JMP-Scripts/MFR-a-Functional-Programming-Library-for-JSL/ta-p/47803
ぜひお役立てください。
ところで、私は式よりも匿名関数を使用することを好みますが、解決しようとしている問題に応じて匿名関数を切り替える必要がありました。
Re: JSL を使用した関数型プログラミング、誰かいますか?ストアド if 関数はちょっとしたチートなので、2 番目にリストしました。 この関数はリストを解析して if ステートメントを生成し、その JSL をファイルに書き込み、それがプログラムに組み込まれます。
その場で if ステートメントを作成する関数を試してみましたが、パフォーマンスが大幅に低下し、コードがかなり静的であるため、生成された if 関数を保存して使用する方が簡単であることがわかりました。Re: JSL を使用した関数型プログラミング、誰かいますか?評価されるコードをストアド if 関数に渡すにはどうすればよいでしょうか?現在は両方の式または関数を使用していますが、今後は 1 つのセットに標準化する予定です。
別の関数を評価するマップ関数の例:
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: JSL を使用した関数型プログラミング、誰かいますか?私はこのアプローチを使用し、データ テーブルから動的ジャーナルを生成し、テーブルをネストされたリストに変換して再度元に戻し、UI ダイアログ ウィンドウを生成する機能を備えています。
また、タイプミスのデバッグにうんざりしていたので、JSL を使用して、よく使う複雑な if 関数 (条件、true での状態変化と true でなくなったときの状態変化のリスト (オプション)) を作成しました。