Bizarre de JMP Expr(), quelqu'un peut-il expliquer ?Il s'agit principalement d'un message de frustration concernant l'incohérence suivante concernant l'insertion d'expressions « IF » dans une expression « IF ».Je crois comprendre que les langages de programmation ne devraient être que cohérents (et je suis conscient de nombreuses autres incohérences de JMP - c'est juste que celle-ci n'a aucun sens pour moi).
/*
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) )
*/
Si quelqu'un a des idées, ou surtout si vous connaissez un moyen d'insérer de manière fiable n'importe quelle expression dans n'importe quelle autre expression (sans utiliser « Eval Insert » ou des chaînes), ce serait génial !Merci!
Modélisation statistique avancéeRe : Bizarre de JMP Expr(), quelqu'un peut-il expliquer ?il existe une solution de contournement pour accomplir la tâche demandée - mais la vraie question : POURQUOI?!? n'a pas encore de réponse.
ajouté à Petits pièges dans Jmp et JSL
Re : Bizarre de JMP Expr(), quelqu'un peut-il expliquer ?Autres exemples qui réfutent facilement certaines hypothèses - et ajoutent quelques informations supplémentaires :
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 : Bizarre de JMP Expr(), quelqu'un peut-il expliquer ?Bonjour,
Bien que je ne sois pas sûr, je me demande si ce comportement est dû au fait que l'extrait "IF ( a )" n'est pas une expression JSL bien formée. Autrement dit, la fonction IF prend 2 arguments, pas un. JMP n'a aucun moyen de savoir si "notAnIf( a )" est une expression bien formée, alors peut-être hausse les épaules et continue ( ? ) Supposition totale de ma part.
Le fait que ce qui suit fonctionne comme vous le souhaitez semble ajouter un certain soutien à cette idée, mais cela n'explique pas pourquoi @ben_ph L'idée de fonctionne, car elle insère avec succès REPLACE_ME là où j'ai un élément manquant.
expr = Expr( If( a, . ) );
Substitute Into( expr, expr(.), expr( If( b, c ) ) );
Show( Name Expr( expr ) );

Acclamations,
Brady
Re : Bizarre de JMP Expr(), quelqu'un peut-il expliquer ?Pour contourner le problème sans utiliser de chaînes, vous pouvez faire quelque chose comme
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 : Bizarre de JMP Expr(), quelqu'un peut-il expliquer ?C'est étroitement liée à le même que Comment insérer une liste dans une autre liste . Avec votre question, je soupçonne maintenant qu'il existe une exception spéciale pour les noms de fonctions intégrées qui montre ce comportement.
expr = Expr( not an If( a ) );
est le même que
expr = Expr( NotAnIf( a ) );
faire de NotAnIf (ou pas un if) un nom de fonction que JMP ne reconnaît pas comme intégré. Dans l'exemple { list }, {...} est identique à List(...) et est un nom de fonction intégré.
expr = Expr( somme( a ) );
Insérer dans( expr, Expr( sum( b, c ) ) );
Afficher( Nom Expr( expr ) );
/* :
Nom Expr(expr) = Somme(a, b, c);
//:*/
expr = Expr( somme1( a ) );
Insérer dans( expr, Expr( sum1( b, c ) ) );
Afficher( Nom Expr( expr ) );
/* :
Nom Expr(expr) = sum1(a, sum1(b, c));
Je n'aime pas ça non plus.
@XanGregg