Тип данных структуры в Mathematica?
После игры с символическими и численными возможностями Mathematica я считаю, что это хороший язык программирования. Однако то, что делает его менее привлекательным как язык общего назначения, - это отсутствие типа данных типа C (типа записи, как известно в Паскале). Как я могу обойти эту проблему?
Ответы
Ответ 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
Для получения дополнительной информации см.
Ответ 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}}