JMP Expr() seltsam, kann mir das jemand erklären?Dies ist größtenteils nur ein frustrierender Beitrag über die folgende Inkonsistenz beim Einfügen von „IF“-Ausdrücken in einen „IF“-Ausdruck.Nach meinem Verständnis sollten Programmiersprachen nichts anderes als konsistent sein (und mir sind viele andere JMP-Inkonsistenzen bekannt – nur diese hier ergibt für mich überhaupt keinen Sinn).
/*
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) )
*/
Wenn jemand irgendwelche Erkenntnisse hat oder insbesondere, wenn Sie eine Möglichkeit kennen, jeden Ausdruck zuverlässig in einen anderen Ausdruck einzufügen (nicht durch Verwendung von „Eval Insert“ oder Zeichenfolgen), wäre das großartig!Danke!
Erweiterte statistische ModellierungBetreff: JMP Expr() seltsam, kann mir das jemand erklären?Es gibt eine Problemumgehung, um die angeforderte Aufgabe zu erfüllen – aber die eigentliche Frage: WARUM?!? ist noch nicht beantwortet.
hinzugefügt zu Winzige Fallen in Jmp und JSL
Betreff: JMP Expr() seltsam, kann mir das jemand erklären?Weitere Beispiele, die einige der Hypothesen leicht widerlegen – und weitere Erkenntnisse hinzufügen:
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) (!!)
Betreff: JMP Expr() seltsam, kann mir das jemand erklären?Hallo,
Obwohl ich mir nicht sicher bin, frage ich mich, ob dieses Verhalten darauf zurückzuführen ist, dass das Snippet „IF ( a )“ kein wohlgeformter JSL-Ausdruck ist. Das heißt, die Funktion IF benötigt zwei Argumente, nicht eines. JMP hat keine Möglichkeit zu wissen, ob „notAnIf( a )“ ein wohlgeformter Ausdruck ist, also zuckt es vielleicht mit den Schultern und fährt fort ( ? ). Totale Vermutung meinerseits.
Die Tatsache, dass das Folgende so funktioniert, wie Sie es beabsichtigen, scheint diese Idee etwas zu unterstützen, erklärt aber nicht, warum @ben_ph Die Idee von funktioniert, da sie REPLACE_ME erfolgreich dort einfügt, wo mir ein fehlt.
expr = Expr( If( a, . ) );
Substitute Into( expr, expr(.), expr( If( b, c ) ) );
Show( Name Expr( expr ) );

Prost,
Brady
Betreff: JMP Expr() seltsam, kann mir das jemand erklären?Um dieses Problem zu umgehen, ohne Zeichenfolgen zu verwenden, können Sie Folgendes tun:
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 ) )
Betreff: JMP Expr() seltsam, kann mir das jemand erklären?Das ist eng verwandt mit das Gleiche wie So fügen Sie eine Liste in eine andere Liste ein . Aufgrund Ihrer Frage vermute ich nun, dass es eine spezielle Ausnahme für integrierte Funktionsnamen gibt, die dieses Verhalten zeigt.
expr = Expr( not an If( a ) );
ist das gleiche wie
expr = Expr( NotAnIf( a ) );
NotAnIf (oder kein If) zu einem Funktionsnamen machen, den JMP nicht als integriert erkennt. Im Beispiel {list} ist {...} dasselbe wie List(...) und Ist ein integrierter Funktionsname.
expr = Expr( sum( a ) );
Einfügen in( expr, Expr( sum( b, c ) ) );
Show( Name Expr( expr ) );
/*:
Name Expr(expr) = Sum(a, b, c);
//:*/
expr = Expr( sum1( a ) );
Einfügen in( expr, Expr( sum1( b, c ) ) );
Show( Name Expr( expr ) );
/*:
Name Expr(expr) = sum1(a, sum1(b, c));
Mir gefällt es auch nicht.
@XanGregg