преобразование символов в строки без оценки - PullRequest
6 голосов
/ 02 марта 2011

Как я могу сделать toStr[list], который принимает список символов и возвращает их в виде строк? Я бы хотел a=1;toStr[{a}] дать {"a"}

Обновление 03/02 : рецепт Лео работает, также для создания версии, которая принимает последовательность вместо списка, который я сделал SetAttribute[toStr2,HoldAll];toStr2[a__]:=toStr[{a}]

1 Ответ

7 голосов
/ 02 марта 2011

Вы можете использовать HoldForm:

a = 1; b = 2;ToString@HoldForm[{a, b}]

Это дает {a, b}. Чтобы сделать это функцией toStr, вам нужно установить атрибуты, чтобы она не оценивала аргументы:

ClearAll[toStr]; SetAttributes[toStr, {HoldAll, Listable}];
toStr[x_] := ToString@HoldForm[x];
a = 1; b = 2; toStr[{a, b}]

В качестве альтернативы вы можете использовать Unevaluated; в приведенном выше коде toStr[x_] := ToString@Unevaluated[x] будет работать так же хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...