DMUG-Archiv 2003

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

RE: Variable und Variablenname in einer Funktion

>-----Original Message-----
>From: Schlosser Reinhard, Prof. Dr.
>[mailto:reinhard.schlosser@XXXXXXX.de]
>Sent: Thursday, March 20, 2003 10:28 AM
>To: 'dmug@XXXXXXX.ch'
>Subject: Variable und Variablenname in einer Funktion
>
>
>In einer Funktion möchte ich den Wert einer Variablen und deren
>Variablennamen nutzen.
>
>Ich löse das umständlich, z. B. wie folgt:
>
>f[x_,y_]:=x*y
>
>Der Aufruf von
>
>z = 2; f[z,"z"]
>
>ergibt
>
>2 z.
>
>Wie muß ich die Funktion definieren, so daß ich ihr nicht den String
>übergeben muß?
>
>
>Mit freundlichen Gruessen / Best Regards
>Prof. Dr.-Ing. Reinhard Schlosser
>
>Fachhochschule Deggendorf
>Fachbereich Elektrotechnik und Medientechnik
>Edlmairstrasse 6 + 8
>94469 Deggendorf
>Tel 0991-3615-515
>Fax 0991-3615-599
>reinhard.schlosser@XXXXXXX.de
>http://www.fh-deggendorf.de
>
>

Lieber Herr Schlosser,

was Sie bekommen haben, war

In[17]:= f[x_, y_] := x*y
In[18]:= z = 2; f[z, "z"] // InputForm
Out[18]//InputForm= 2*"z"

also das Produkt einer Zahl mit einem String.


Um einer Funktion einen nicht-evaluierten Ausdruck zu übergeben, benutze
eines der Hold-Attribute, z.B.

In[19]:= Clear[f]

In[20]:= Attributes[f] = HoldRest
Out[20]= HoldRest

In[21]:= f[expr_, literal_] := expr HoldForm[literal]

In[22]:= f[z, z]
Out[22]= 2 z

In[23]:= % // InputForm
Out[23]//InputForm= 2*HoldForm[z]


Vielleicht ist auch dies sinnvoller:

In[24]:= Clear[f]
In[25]:= Attributes[f] = HoldRest;

In[26]:= f[expr_, literal_] := HoldForm[expr literal]
In[27]:= f[z, z]
Out[27]= 2 z
In[28]:= % // InputForm
Out[28]//InputForm= HoldForm[2*z]

das hängt dann davon ab, was Sie weiter damit machen wollen.

--
Hartmut Wolf


Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html