После игры с символическими и численными возможностями Mathematica я считаю, что это хороший язык программирования. Однако то, что делает его менее привлекательным как язык общего назначения, - это отсутствие типа данных типа C (типа записи, как известно в Паскале). Как я могу обойти эту проблему?
Тип данных структуры в Mathematica?
Ответ 1
Обновление: Mathematica 10 представила Association, который имеет многие из самых важных свойств struct. (См. новый ответ.) Оригинальная, несколько устаревшая версия этого ответа ниже.
Вы можете использовать списки правил Mathematica для имитации типа данных типа C-типа.. Например,
person = {firstName -> "John", lastName -> "Doe"}
Затем вы можете получить доступ к полям записей с помощью оператора /.:
firstName /. person
дает John.
lastName /. person
дает Doe.
Чтобы обновить поле записи, добавьте обновленное поле в список:
PrependTo[person , firstName -> "Jane"]
firstName /. person, то получим Jane.
Также см. документацию Mathematica по правилам преобразования.
Ответ 2
Если я правильно понял ваш вопрос, вы можете просто написать такие вещи:
x[foo] = bar x[bar] = baz x[1] = 7 x[7] = 1 ?x
Затем для доступа к данным для любого конкретного индекса просто введите его (например, x[1] вернет 7, x[foo] вернет bar).
Ответ 3
Mathematica 10 внедрила Association, который имеет многие из самых важных свойств struct.
someData = <| "name" -> "Bob", "age" -> 23 |>
In[1]:= someData["name"]
Out[1]= Bob
In[2]:= someData["age"]
Out[2]= 23
In[3]:= someData[[2]]
Out[3]= 23
Для получения дополнительной информации см.
-
Association -
DataSet(который основывается наAssociation) - Руководство Wolfram: Элементарное введение в DataSets и Быстрое введение для программисты.
- Вопросы Mathematica.SE: Как использовать ассоциации и эквивалент Struct в Mathematica?
- Этот комментарий HackerNews.
Ответ 4
Этот способ может работать:
x[foo] = bar
x[bar] = baz
x[1] = 7
x[7] = 1
x[c] = {{1,2,3},{4,5,6}}
а также для изменения элементов поля списка вы можете сделать следующее:
x[c] = ReplacePart[x[c], {1, 1} -> 8]
который возвращает:
x[c] = {{8,2,3},{4,5,6}}