Тип данных структуры в 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}}