16

Mathematica の記号機能と数値機能を試してみると、Mathematica もまともなプログラミング言語であることがわかりました。ただし、C のような構造体データ型 (または Pascal で知られているレコード型) がないことが、汎用言語として魅力的ではない理由の 1 つです。どうすればこの問題を回避できますか?

4

4 に答える 4

15

更新: Mathematica 10 では が導入されましAssociationstruct. (新しい回答を参照してください。)この回答の元の、やや非推奨のバージョンを以下に示します。


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[バー] = バズ
x[1] = 7
x[7] = 1
?バツ

次に、特定のインデックスのデータにアクセスするには、同じように入力します (例: x[1]will return 7x[foo]will return bar)。

于 2009-09-21T06:42:41.200 に答える
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 に答える