Как генерировать именованные шаблоны в Mathematica? - PullRequest
2 голосов
/ 27 мая 2010

В принципе, я хочу использовать следующее для генерации именованного шаблона для последующего использования:

In[1]:= Replace[var["x"],var[name_]:>Pattern[Apply[Symbol,name],_]]

Я ожидал увидеть этот результат.Именованный шаблон, который я могу использовать в последующих правилах:

Out[1]= x_

Но вместо этого я получил:

Out[1]= Pattern[Symbol @@ x,_]

В документации сказано, что Шаблон [..] может использоваться только ссимвол в качестве первого аргумента.Применить [Символ, имя] не вычисляется для возврата символа, поэтому шаблон [..] не совпадает.

Как мне получить именованный шаблон из какого-либо имени строки?

1 Ответ

3 голосов
/ 27 мая 2010

Шаблон name_ соответствует строке "x", в результате чего Apply[Symbol,"x"] возвращает объект с головой String. Затем это передается Pattern, который возвращает то, что вы видите. Чтобы получить то, что вы ожидаете, вы должны передать Symbol на Pattern. Изучите различные результаты, которые вы получаете с FullForm[].

Вероятно, вы можете сделать это, изменив фрагмент:

Pattern[Apply[Symbol,name],_]]

до

Pattern[Evaluate[ToExpression[name],_]]

, но это будет работать, только если ToExpression[name] вернет Symbol. Я обнаружил, что мне пришлось форсировать оценку.

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