Структурировать тип данных в Mathematica? - PullRequest
15 голосов
/ 21 сентября 2009

Поработав с символическими и числовыми возможностями Mathematica, я нахожу его также неплохим языком программирования. Однако кое-что, делающее его менее привлекательным в качестве языка общего назначения, - это отсутствие C-подобного структурного типа данных (или типа записи, известного в Pascal). Как я могу обойти эту проблему?

Ответы [ 4 ]

15 голосов
/ 22 сентября 2009

Обновление : 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 по правилам преобразования .

8 голосов
/ 21 сентября 2009

Если я правильно понимаю ваш вопрос, вы можете просто написать что-то вроде этого:

x[foo] = bar
x[bar] = baz
x[1] = 7
x[7] = 1
?x

Затем, чтобы получить доступ к данным для любого конкретного индекса, просто введите его (например, x[1] вернет 7, x[foo] вернет bar).

3 голосов
/ 01 ноября 2015

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

Подробнее см.

2 голосов
/ 05 февраля 2010

Этот способ может работать:

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}}
...