Y a-t-il un moyen de forcer Mathematica à traiter des variables souscrites indépendamment de leurs contreparties non sautes? Plus précisement. Dis, j'ai les définitions suivantes: maintenant lorsque j'utilise p> mathematica substituera avec p> Subscript[{{1, 2}, {3, 4}},1]
6 Réponses :
Le symbole est Lorsque vous définissez: p> B code>, et pas
indice [B, _] code>.
f[b, 1]
->f[{{1, 2}, {3, 4}}, 1]
Bien sûr, je me demande quelle magie interne le paquet de notation utilise réellement pour atteindre ce qu'il fait? Par exemple, qu'est-ce que symbolise code> fait réellement?
@Simon ha! J'ai posté et supprimé ensuite un commentaire similaire sur votre réponse. Ce genre de choses me fait frémir :)
Ce ne serait pas si mauvais - sauf que symbole code> est
verrouillé code> - ce qui vous empêche de lui donner Extra
Makeboxes code> Définitions. Voir le Wiki communautaire "Réponse" J'ai publié ci-dessous.
@Simon, je pense que votre réponse est très gentille, mais je doute de la robustesse du tout. Lorsque vous voulez qu'un Calc fait que MMA soit génial, mais l'environnement en soi semble fragile et le processus de débogage (dure seul) est généralement plus difficile chaque fois que vous ajoutez un niveau d'abstraction / redéfinition.
La réponse a de graves problèmes - je ne le posais que pour que d'autres personnes puissent se termine en la fixant pour moi!
pourrait utiliser la notation de l'emballage du même nom.
Ne vous dérange pas du code ci-dessous, vous ne comprenez pas la structure de la randonnée. Il suffit d'utiliser le modèle de palette et tapez l'indice de [B, J_] dans le côté gauche et, par exemple, BB [J_], dans la droite. Donc, les variables "réelles" sont maintenant bb [1], etc., et vous pouvez affecter en toute sécurité à b. P> out [3] = {{1, 2}} p> out [4] = {{3, 4}} p> out [5] = {{1, 2}, {3, 4}} p> Subscript[b, 1]
@Daniel comme il devrait être évident de ma réponse, je n'ai jamais fait. :)
Bonjour Daniel: Le paquet de notation a une commande appelée symbolise code> conçu pour faire ce que Max voulait. La commande pleine
notation code> n'est pas nécessaire.
Le problème potentiel avec la notation personnalisée est que le mécanisme d'analyse des fichiers .nb et .m est différent. Il provoque définitivement un problème d'infixnotation ( groupes.google.com/forum/#!msg/comp.soft-sys.math.mathematic A / ... ), pas sûr de symboliser
@Daniel je suis perplexe par votre réponse. Si vous entrez Indice [B, 1] CODE> Vous obtiendrez effectivement
{{1,2}} code> comme sortie. Mais si vous entrez la même chose formatée comme indice d'indice, c'est-à-dire. B + Control [-], vous obtiendrez un résultat bien rendu de
indice [{{1,2}, {3,4}}, 1] code> en retour.
@David: essayez d'utiliser la commande NOTATION [PARSEDBOXWRAPPER [\ (B \ _J_ \ \)] \ [DOUBLELONGLEFTRUCTION] PARSEDBOXWRAPPER [\ (BB [J _] \)]]] code>.
@David Cela fonctionne pour moi, tant que vous ne mélangez pas l'indice [B, 1] et B_1 (_ indiquant l'inscription). Donc, b_1 = {{1, 2}}; b_2 = {{3, 4}} b = jointure [b_1, b_2] fonctionne, mais b_1 = {{1, 2}}; b_2 = {{3, 4}} b = jointure [indice [B, 1], indice [B, 2]] (sur un noyau propre) rendements b [1, 2]
@Simon merci, ça marche. Maintenant, je vais essayer de comprendre pourquoi. Je me réfléchirai à votre code et à Sjoerd.
Réponse à une réponse à une question précédente, Notation Mathematica et mods de syntaxe , Telefunkenvf14 mentionné qu'il était
dans l'espoir d'utiliser des notations pour forcer la MMA Pour traiter les variables souscrites comme symbole p> blockQuote>
qui est essentiellement quelle concerne cette question. P>
Wrach a souligné que le Package de notation peut le faire tout simplement en utilisant
symboliser code> p>
xxx pré> où (comme dans la réponse de Daniel) ne vous inquiétez pas trop sur la structure code> de la case code> ci-dessus, car vous pouvez utiliser NOTATION CODE> PALETTE POUR ENTRÉEZ CETTEURE EN PLUS. P>
Vérifiez que tout fonctionne comme recherché: P>
In[6]:= Subscript[b, 1] = {{1, 2}} Subscript[b, 2] = {{3, 4}} b = Join[Subscript[b, 1], Subscript[b, 2]] Out[6]= {{1, 2}} Out[7]= {{3, 4}} Out[8]= {{1, 2}, {3, 4}}
Voici un certain code que j'avais l'habitude d'utiliser pour faire cela. Cela devrait fonctionner pour vous aussi:
In[11]:= InputForm@DownValues[f] Out[11]//InputForm= {HoldPattern[f[ProxySymbol$99_]] :> Sin[ProxySymbol$99]}
Salut Andrew - vient de voir ça. Cela fonctionne bien et est beaucoup plus sain d'esprit que mon approche. +1
J'ai étudié le fil sur des variables souscrites en détail en collant les différentes réponses dans un ordinateur portable Mathematica (et l'avez essayé avec les Version 7 et 8). Cependant, ce que j'ai découvert, dans certains cas, la représentation explicite des variables souscrites comme indice indice [A, B] code> ne donne pas la bonne réponse comme contenue dans ces réponses. Cependant, lorsque j'ai utilisé explicitement la notation 2D pour l'indice (A_B), la réponse était comme prévu. Pourrait-il s'agir que lors du colle des symboles souscrit dans un email, ils sont représentés comme
indice [A, B] code>. (Bien sûr, je devrais ajouter que pour chaque contribution, j'ai commencé Mathematica Fresh - après avoir utilisé
Quit [] code>). P>
Bonjour Robert, bienvenue dans le débordement de la pile. Publier une nouvelle réponse n'est pas vraiment la place pour un tel commentaire, mais depuis que vous n'avez pas assez réputation de commenter , je suppose Il n'y a pas grand chose d'autre que vous pourriez faire pour augmenter ce point valide. Mathematica convertit automatiquement les boîtiers de l'indice en formulaire complet lors de la copie en tant que texte d'entrée, je pense que tout le monde a automatiquement converti le formulaire complet dans les cases lors du test et de la non-une pensée de mentionner ce fait. Je vais mettre à jour ma réponse pour refléter cette préoccupation.