我知道Select[]
是某種與列表配合使用的Mathematica函數。但是,我需要能夠通過名稱將每個元素抓取到變量中,以便我可以像在ForEach
循環中一樣使用它。如何重寫這個Mathematica循環代碼有效?
下面,您可以看到我將其中一個循環轉換爲Select
,但我還有兩個嵌套循環。 Mathematica聲明它具有完整的程序潛力,但它沒有ForEach
循環,這使得在某個給定的循環中對每個元素進行操作(做多個函數/動作)要困難得多。
即使這可以轉換成功能列表後打印,我寧願有東西,可以打印,因爲它找到適用的圖形。請注意,我打破了以下區域的功能純度:隨機和打印,如果發現相鄰的頂點使測試的無效,我甚至會打破循環。
我想要做的算法將循環大量的次數(在報告有趣的結果之前它不一定會停止),這個例子當前有5次。產生一個隨機圖形,並找出它是否有一個偏心率大於半徑的頂點,而不是與偏心半徑相鄰的頂點。如果它具有此屬性,則會打印它。
For[x = 0, x < 5, x = x + 1,
n = RandomInteger[{1, 10}];
m = RandomInteger[{n - 1, n * (n - 1)/2}];
G = RandomGraph[{n, m}];
R = Radius[G];
V = VertexList[G];
P = Select[V, R + 1 == VertexEccentricity[G, #]];
ForEach [p, P,
N = AdjacencyList[G, p];
test = true;
ForEach[n, N,
If[VertexEccentricity[G, n] == R,
test = false;
];
];
If [test == true,
Print[G]
]
]
]
當您需要循環時,「Do」表單通常更清潔。特別是在這種情況下,因爲你從不使用'x',你只需要'Do [code,{5}]''。作爲另一方的評論,你應該避免用帽子來啓動你自己的符號。 (例如'N'是一個內置的符號) – agentp
另外,雖然Bill表明你在這裏不需要它,但是'Do'構造可以執行你的'ForEach'任務,'Do [code,{p,P} ]'迭代列表'P' – agentp