Farz edelim ki, bir vektörü v alan ve bir şekilde dönüştürülen elemanlarla yeni bir vektör döndüren bir işlevim var. Bu, vektörü sıraladığını varsayan g işlevini çağırarak yapar. Yani f şöyle tanımlanabilir istiyorum:Unsort: bir permutasyonu hatırlama ve geri alma
f[v_] := Module[{s, r},
s = Sort[v]; (* remember the permutation applied in order to sort v *)
r = g[s];
Unsort[r] (* apply the inverse of that permutation *)
]
"unsort" yapmanın en iyi yolu nedir?
Ya da bir şekilde çalışmak gerçekten fantezi olsun ve bu olabilir:
answer = Unsort[g[Sort[v]]];
EKLENDİ: en bir oyuncak örnekle bu beton yapalım. Bir vektörü alan ve varsa, bir sonraki en küçük öğeye her bir öğeye ekleyerek onu dönüştüren bir işlev istiyoruz. v sıralanır olup olmadığını çalışır biz gerçekten istediğiniz fonksiyonu, f Şimdi
g[v_] := v + Prepend[[email protected], 0]
: Yani, biz vektör sıralanır varsayarsak yazma, o yüzden bu varsayımı kılan bir yardımcı işlevi g yazalım kolaydır : TomD ve Yaroslav
f[v_] := (* remember the order;
sort it;
call g on it;
put it back in the original order;
return it
*)
Belki de bir parametre olarak ** g ** geçmek daha iyidir. –
ya da biraz daha verimli, orijinalinizi '[[o [Sipariş] [v]} ile, [[[[[[[[[[[] [] []], [Sipariş] [1] Siparişi] ile değiştirin. – Janus