これは実際には2倍の質問です。最初に、オブジェクト指向のプログラミングの背景から来ている人物として、私はMathematicaのリストを、少し面倒なことの根拠としています。MathematicaのルールとGraphEditから返されるオブジェクトの違いは何ですか?
graph={{1, 2, 3, 4, 5}, {1->2, 2->4, 4->4, 4->5}};
、その後、プログラマはちょうど
graph[[1]]
は頂点のリストを参照していることを覚えておく必要があります。だからここに(私の知る限り)Mathematicaのプログラマがグラフを定義する方法でありますそして
graph[[2]]
は、エッジのリストを参照する(ルールのセットとして定義される。この場合には)
Mathematicaのルールについて学び、データ構造をオブジェクト指向の感じにする機会を見ました。他のいくつかのMathematicaのファイルが定義されている場合
Verts/.graph
Edges/.graph
によってこれは、しかし、奇妙な副作用を持つことができます(それぞれ)
graph={Verts->{1,2,3,4,5}, Edges->{1->2, 2->4, 4->4, 4->5}};
、その後、頂点と辺を参照してください。私のようなグラフに何かを定義することにしましたしかし、ルールの左辺は識別子ではなく、それ自体がオブジェクトであるため、どこかでグローバル変数としてVertsまたはEdgeを使用します。
質問1これは良い習慣ですか、Mathematicaのデータ構造を作成するのに悪いですか?私は、任意のプロパティを添付できるように、この方法はあるそれをやっている理由の一つ、色を言う:
AppendTo[graph, Colors->{Red, Red, Blue, Red, Red}]; (* Labels ea. vert with a color *)
と私の機能は、特定のプロパティが追加された正確な順序を知っている必要はありません。
GetColor[graph_, vertIdx_]:=(Colors/.graph)[[vertIdx]];
と私はいつもの色情報を持つグラフデータ構造を持っているので、中にスポットを予約したくないたくない場合がありますので、これは、好ましい。たとえば、あなたはGETCOLORは以下のように定義された機能を持っているかもしれませんリスト(グラフ[[[3]]のような)を色情報として使用します。
2番目:GraphEditが上記のルールのようなものを返すことがわかりました。ルールのように見えます
Graph->{1->2,3->3,4->4,5->4}
:たとえば、私が実行(およびグラフを描画する)場合
Needs["GraphUtilities`"];
g = GraphEdit[];
g[[2]]
私のような出力が得られます!だから私はこれを試してみてください。
Graph/.g[[2]]
が
{1->2,3->3,4->4,5->4}
が戻ってきたことを期待します。しかし、その代わりに、出力はちょうど
Graph
である。しかし、私が代わりに
g[[2]][[1]] /. g[[2]]
を実行する場合、私は、予想される出力を得る、gは[[2]]本当にあることを意味し
{1->2,3->3,4->4,5->4}
しかし、何らかの理由でg [2] [1](実行された場合Graphを印刷する)はGraphを入力するのと同じではありません。だから、一体何g [2] [[1]]ですか?
実際の識別子のように思えますが、上記の質問1の問題を解決するために使用したいと思います。誰かがその違いを知っていますか、またはMathematicaに1対1を入力する方法はありますか?
このドキュメント(またはオンライン)に関するドキュメントでは何も見つかりません。ありがとう。
うわー、これは非常に便利で、Mathematicaを理解する上で多くの欠点があります。 Mathematicaドキュメンテーション用のドキュメントを書くべきだと思いますが、Mathematica Programming for C/Java/C++ Programmersの内容は次のようになります。ここではC/Java/C++で行うことができます。それをMathematicaでやってみましょう...あなたはそれを書くことを考えるかもしれません。 – jcb
@quadelirus Mathematicaを理解する上での穴埋めについては、Leonid Shifrinの[Mathematicaプログラミング:高度な紹介](http://www.mathprogramming-intro.org/)を参考にしてください。 – WReach