2011-03-02 6 views
6

¿Cómo puedo hacer toStr[list] que toma una lista de símbolos y los devuelve como cadenas? Me gustaría dar a=1;toStr[{a}]{"a"}convirtiendo símbolos en cadenas sin evaluación

actualización 03/02: Receta de Leo trabaja, también para hacer una versión que tiene una secuencia en lugar de la lista que hice SetAttribute[toStr2,HoldAll];toStr2[a__]:=toStr[{a}]

Respuesta

7

Puede utilizar HoldForm:

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

Esto da {a, b}. Para convertirlo en toStr función, es necesario configurar los atributos de modo que no evalúa los argumentos:

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

Como alternativa, se puede usar Unevaluated; en el código anterior toStr[x_] := [email protected][x] funcionaría igual de bien.

+0

Eso da '" {a, b} "' en lugar de '{" a "," b "}' –

+0

Lo hace. Parece que puede cambiar esto configurando también el atributo 'Listable' (respuesta editada) –

+1

También podría usar' SymbolName' para extraer el nombre del símbolo no calificado (y 'Context' para obtener el contexto). – WReach

Cuestiones relacionadas