3

ネストされたリストの特定の要素を要求すると、Mathematica から奇妙な出力が返されます。

私は持っている:

testroots = {{0, 0, 0}, {0, 0, 0}}

頼むと

testroots[[0,0]]

代わりにMathematicaは言う

Symbol

これがなぜなのか、何が間違っていたのかわかりません。

ありがとう!

4

2 に答える 2

2

b.gatessucks と bill s が既に書いたように、Mathematica のリストはインデックス 1 から始まります。ただし、インデックス 0 も許可されHead、式の を与えます。それはどういう意味ですか?

Mathematicaのリスト{a,b,c}は、内部的には Form の式List[a, b, c]です。あなたはそれに適用することによってそれを見ることができますFullForm

FullForm[{a, b, c}]
(*
==> List[a, b, c]
*)

左括弧の前の部分、ここListでは式の頭と呼ばれます。Andはリストを与えるtestroots[[0]]と同等です。これは、完全な式で要素の前にあることを考えると、理にかなっています。Head[testroots]ListList

しかし、あなたの表現はtestroots[[0,0]]どうですか?リストの先頭の先頭にアクセスします。あなたのリストの先頭は ですList。しかし、頭はList何ですか?結局のところ、それはフォームを持っていませんHead[arg1, arg2, ...]

アトミック式の場合、Mathematica はアトムのタイプを表す記号を与えます。たとえば、Head[1]is IntegerHead["Hello"]is StringHead[foo]is (が割り当てられていないとSymbol仮定)。foo上記の形式の式の先頭も、式の型と見なすことができることに注意してください。リストListの型は でありa+b、完全な形式の型Plus[a, b]Plus、つまり合計です。

NowListは記号なので、Head[List]ですSymbol。したがって、あなたの のような任意のリストについてはtestrootstestroots[[0,0]]と評価されSymbolます。

リストの最初の要素の最初の要素を取得するには、 を使用しますtestroots[[1,1]]

于 2012-10-06T18:46:40.760 に答える
2

Mathematica のインデックスはゼロではなく 1 から始まります.したがって、testroots の [[0,0]] エントリは存在しません。を使用して最初の要素を取得できます

testroots[[1, 1]]
于 2012-10-06T18:28:53.373 に答える