2011-03-02 10 views
6

Jak utworzyć toStr[list], która pobiera listę symboli i zwraca je jako ciągi znaków? Chciałbym a=1;toStr[{a}] dać {"a"}Konwertowanie symboli na ciągi bez oceny

Aktualizacja 03/02: przepis Leo działa również zrobić wersję, która zaczyna sekwencję zamiast listy zrobiłem SetAttribute[toStr2,HoldAll];toStr2[a__]:=toStr[{a}]

Odpowiedz

7

Można użyć HoldForm:

a = 1; b = 2;[email protected][{a, b}] 

Daje to {a, b}. Aby uczynić go toStr funkcji, należy ustawić atrybuty tak, że nie ocenia argumenty:

ClearAll[toStr]; SetAttributes[toStr, {HoldAll, Listable}]; 
toStr[x_] := [email protected][x]; 
a = 1; b = 2; toStr[{a, b}] 

Alternatywnie, można użyć Unevaluated; w powyższym kodzie toStr[x_] := [email protected][x] będzie działać równie dobrze.

+0

To daje '" {a, b} "' zamiast '{" a "," b "}' –

+0

Tak robi. Wygląda na to, że możesz to zmienić, ustawiając również atrybut "Listable" (odpowiedź edytowana). –

+1

Możesz również użyć 'SymbolName', aby wyodrębnić niekwalifikowaną nazwę symbolu (i" Kontekst ", aby uzyskać kontekst). – WReach

Powiązane problemy