>-----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