JMP Expr() の奇妙さ、誰か説明できますか?これは主に、「IF」式への「IF」式の挿入に関する以下の矛盾に対する単なる不満の投稿です。私の理解では、プログラミング言語は一貫性がなければ何もすべきではありません (そして、他にも多くの JMP の不一致があることは承知しています。ただ、これは私にとってまったく意味がありません)。
/*
What I want is to generate an expression such as the one below programmatically. There of course is a straight-forward work around, I just don't like dealing with special cases especially when they make no sense.
Expr( If( a, If( b, c) ) )<BR />
*/
expr = Expr( If( a ) );
Insert Into( expr, Expr( If( b, c ) ) );
Show( Name Expr( expr ) );
/*
If( a, b, c)
*/
expr = Expr( not an If( a ) );
Insert Into( expr, Expr( If( b, c ) ) );
Show( Name Expr( expr ) );
/*
not an If( a, If( b, c) )
*/
誰かが何か洞察を持っている場合、または特に式を他の式に確実に挿入する方法を知っていれば(「Eval Insert」や文字列を使用するのではなく)、それは素晴らしいことです。ありがとう!
高度な統計モデリングRe: JMP Expr() の奇妙さ、誰か説明できますか?要求されたタスクを達成するための回避策はありますが、実際の質問は次のとおりです。なぜ?!?はまだ答えられていません。
に追加Jmp と JSL の小さなトラップ
Re: JMP Expr() の奇妙さ、誰か説明できますか?いくつかの仮説を簡単に反証し、さらなる洞察を追加するさらなる例:
expr = Expr( If( a, x ) );
Insert Into( expr, Expr(If( b,c )) );
Show( Name Expr( expr ) ); // if(a,x,b,c)
expr = Expr( If( a ) );
Insert Into( expr, Expr(If( b )) );
Show( Name Expr( expr ) ); // if(a,b)
expr = Expr( List( a ) );
Insert Into( expr, Expr(List( b )) );
Show( Name Expr( expr ) ); // List(a,b)
expr = Expr( Graph Builder( a ) );
Insert Into( expr, Expr(Graph Builder ( b )) );
Show( Name Expr( expr ) ); // Graph Builder(a,b)
expr = Expr( Head( a ) );
Insert Into( expr, Expr(Head( b )) );
Show( Name Expr( expr ) ); // Head(a,b) (!)
expr = Expr( Not( a ) );
Insert Into( expr, Expr(Not( b )) );
Show( Name Expr( expr ) ); // Not(a) (!!)
Re: JMP Expr() の奇妙さ、誰か説明できますか?こんにちは、
よくわかりませんが、この動作は、スニペット「IF ( a )」が整形式の JSL 式ではないためなのでしょうか。 つまり、関数 IF は引数を 1 つではなく 2 つとります。 JMP には、「notAnIf( a )」が整形式の式であるかどうかを知る方法がないので、おそらく肩をすくめて続行します (?) 私の完全な推測です。
以下が意図したとおりに機能するという事実は、この考えを裏付けるものであるように見えますが、これは理由を説明しません@ben_phのアイデアは機能し、欠落している場所に REPLACE_ME を正常に挿入します。
expr = Expr( If( a, . ) );
Substitute Into( expr, expr(.), expr( If( b, c ) ) );
Show( Name Expr( expr ) );

乾杯、
ブレイディ
Re: JMP Expr() の奇妙さ、誰か説明できますか?文字列を使用しない回避策として、次のようなことができます
expr = Expr( If( a ) );
Insert Into( expr, Expr( REPLACE_ME ) );
Substitute Into( expr, Expr( REPLACE_ME ), Expr( If( b, c ) ) );
Name Expr( expr );
// If( a, If( b, c ) )
Re: JMP Expr() の奇妙さ、誰か説明できますか?これは~と密接に関係していると同じリストを別のリストに挿入する方法。 あなたの質問から、この動作を示す組み込み関数名に特別な例外があるのではないかと思います。
expr = Expr( not an If( a ) );
と同じです
expr = Expr( NotAnIf( a ) );
NotAnIf (または not an if) を関数名にすることは、JMP が組み込みとして認識しません。 { list } の例では、{...} は List(...) と同じであり、は組み込み関数名。
expr = Expr( sum( a ) );
Insert Into( expr, Expr( sum( b, c ) ) );
Show( Name Expr( expr ) );
/*:
名前 Expr(expr) = Sum(a, b, c);
//:*/
expr = Expr( sum1( a ) );
Insert Into( expr, Expr( sum1( b, c ) ) );
Show( Name Expr( expr ) );
/*:
名前 Expr(expr) = sum1(a, sum1(b, c));
私もそれは好きではありません。
@XanGregg