2010-05-27 11 views
2

En principe, je veux utiliser ce qui suit pour générer un motif nommé pour une utilisation ultérieure:Comment générer des motifs nommés dans Mathematica?

In[1]:= Replace[var["x"],var[name_]:>Pattern[Apply[Symbol,name],_]] 

Je me attendais à ce résultat. Un modèle nommé que je peux utiliser dans les règles suivantes:

Out[1]= x_ 

Mais au lieu, je me suis:

Out[1]= Pattern[Symbol @@ x,_] 

La documentation dit que Pattern [..] ne peut être utilisé avec un symbole comme le premier argument. Appliquer [Symbole, nom] n'est pas évalué pour renvoyer un symbole, donc le motif [..] ne correspond pas.

Est-ce que je reçois un motif nommé à partir d'un nom de chaîne?

+0

Et votre question est? Et votre intention est? –

Répondre

3

Le modèle name_ correspond à la chaîne "x", ce qui donne Apply[Symbol,"x"] qui renvoie un objet avec la tête String. Ceci est ensuite passé à Pattern qui renvoie ce que vous voyez. Pour obtenir ce que vous attendez, vous devez passer un Symbol à Pattern. Examinez les différentes sorties que vous obtenez avec FullForm[].

Vous pouvez probablement le faire en changeant le fragment:

Pattern[Apply[Symbol,name],_]] 

à

Pattern[Evaluate[ToExpression[name],_]] 

mais cela ne fonctionnera que si ToExpression[name] retourne un Symbol. J'ai trouvé que je devais forcer l'évaluation.

+0

Merci beaucoup. Cela a produit exactement ce que je voulais. :) – punytroll