After playing with Mathematica's symbolic and numerical capabilities, I find it to be a decent programming language, too. However, something making it less appealing as a general-purpose language is the lack of C-like struct data type (or the record type as known in Pascal). How can I get around this problem?
Update: Mathematica 10 has introduced Association, which has many of the most important properties of a struct. (See new answer.) The original, somewhat deprecated version of this answer is below.
You can use a Mathematica rule lists to mimic a C-like struct data type. E.g.,:
person = {firstName -> "John", lastName -> "Doe"}
You can then access the record's fields by using the /. operator:
firstName /. person
yields John.
lastName /. person
yields Doe.
To update a field of a record, prepend the updated field to the list:
PrependTo[person , firstName -> "Jane"]
firstName /. person then yields Jane.
Also see the Mathematica documentation on transformation rules.
If I understand your question correctly, you can simply write things like this:
x[foo] = bar x[bar] = baz x[1] = 7 x[7] = 1 ?x
Then to access the data for any specific index just type the same (e.g., x[1] will return 7, x[foo] will return bar).
Mathematica 10 has introduced Association, which has many of the most important properties of a 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
For more info, see
AssociationDataSet(which builds onAssociation)- Wolfram guides: Elementary introduction to DataSets and Fast introduction for programmers.
- Mathematica.SE questions: How to make use of Associations and Struct equivalent in Mathematica?
- This HackerNews comment.
This way can work:
x[foo] = bar
x[bar] = baz
x[1] = 7
x[7] = 1
x[c] = {{1,2,3},{4,5,6}}
and also for changing the elements of a list field you can so the following:
x[c] = ReplacePart[x[c], {1, 1} -> 8]
which returns:
x[c] = {{8,2,3},{4,5,6}}
来源:https://stackoverflow.com/questions/1453006/struct-data-type-in-mathematica