在使用了 Mathematica 的符号和数值功能之后,我发现它也是一种不错的编程语言。然而,使其作为通用语言不那么吸引人的原因是缺少类似 C 的结构数据类型(或 Pascal 中已知的记录类型)。我怎样才能解决这个问题?
问问题
4575 次
4 回答
15
更新: 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文档。
于 2009-09-22T11:17:49.370 回答
8
如果我正确理解您的问题,您可以简单地编写如下内容:
x[foo] = 酒吧 x[bar] = baz x[1] = 7 x[7] = 1 ?X
然后访问任何特定索引的数据只需键入相同的(例如,x[1]
将返回7
,x[foo]
将返回bar
)。
于 2009-09-21T06:42:41.200 回答
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 问题:如何在 Mathematica 中使用关联和结构等价物?
- 这个 HackerNews 评论。
于 2015-11-01T17:37:45.543 回答
2
这种方式可以工作:
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}}
于 2010-02-05T11:20:57.220 回答