☐ nouvelle fonctionnalité intéressante
☐ pourrait aider de nombreux utilisateurs !
☐ supprime quelque chose qui ressemble à un « bug »
☑ agréable à avoir
☐ personne n'en a besoin
Qu'est-ce qui a inspiré cette demande de liste de souhaits ?
Pour vérifier si une chaîne fait partie d'une chaîne plus grande - et pour obtenir la position exacte - on peut utiliser contains() .
Pour vérifier si un élément est dans une liste - et pour obtenir la position exacte - on peut utiliser contains() .
Pour vérifier si une expression apparaît dans une expression longue
... il n'y a pas de fonction dans JMP/JSL. Il n'y a pas non plus de fonction pour obtenir la position.
C'est surprenant. Parce qu'il y a quelque chose de cool
Substitute(Expr(...), Exr(replace), Expr(with))
qui doit déterminer si une expression peut être trouvée dans une expression principale - et où elle se trouve.
Quelle amélioration souhaiteriez-vous voir ?
Veuillez fournir une fonction JSL pour vérifier si une expression apparaît dans une expression longue - et pour obtenir la ou les positions :
par exemple, s'il s'agit du 5ème argument du 3ème argument du 1er argument de l'expression principale, la fonction pourrait renvoyer {{1,3,5}}.
S'il trouve l'expression à plusieurs endroits, il pourrait renvoyer des correspondances toutes différentes.
S'il trouve l'expression - mais ne peut pas la localiser exactement [car elle fait simplement partie d'un argument], il pourrait renvoyer 1.
Et si l'expression est manquante, elle pourrait revenir manquante.
Pourquoi cette idée est-elle importante ?
Contient(Expr(...), Expr(recherche)) facilitera les scripts JSL.
C'est légèrement lié à une autre nouvelle fonctionnalité, :folded_hands: Indexation d'expression : accès en lecture et en écriture
autres souhaits de 
ça a l'air de fonctionner :
ContainsExpr=Function ({expression, pattern},
tmp = Substitute(Name Expr(expression), Name Expr(pattern), Expr(.));
not(Name Expr(tmp)==Name Expr(expression))
);
myExpression = Expr({a+b/(x-y),3} );
ContainsExpr( Name Expr(myExpression), Expr(X));
ContainsExpr( Name Expr(myExpression), Expr(c));
ContainsExpr( Name Expr(myExpression), Expr(3));ou via Extract Expr :
ContainsExpr=Function ({expression, pattern},
Not(is empty(Extract Expr(expression, pattern)));
);
myExpression = Expr({a+b/(x-y),3} );
ContainsExpr( Name Expr(myExpression), Expr(X));
ContainsExpr( Name Expr(myExpression), Expr(c));
ContainsExpr( Name Expr(myExpression), Expr(3));Too bad there is no setting for custom functions to NOT evaluate the argument, but just look it up - a magic Extraire l'expressionis capable of.
Without this possibility, maybe it's better to learn the Not(is empty(Extract Expr(
... instead of EVERY time having to wrap the arguments with Expr() to save them from getting evaluated.
@Sarah-Sylvestre .
-> le souhait peut être fermé.