Mathematica — kopanje po izrazima

U dubinu

Vidjeli smo već zagrade (Subscript[□, [[□]]]), kojima možemo izvući proizvoljni element nekog izraza na prvoj razini.

(Subscript[{5,12,a+5b,-3}, [[3]]])

Naravno, na rezultat možemo ponovo primijeniti isti operator, i tako dok ne dođemo do atoma:

(Subscript[%, [[2]]])

(Subscript[%, [[2]]])

Možemo to napisati i jednostavnije:

(Subscript[{5,12,a+5b,-3}, [[3,2,2]]])

Trebamo biti svjesni načina na koji se u Mathematici prikazuju oduzimanje, dijeljenje i korjenovanje:

TreeForm@((-b±(Sqrt[(b^2)-4a c]))/(2a))

((-b±(Sqrt[(b^2)-4a c]))/(2a))[[3,2,1,2,1]]

S druge strane

Navodeći negativne brojeve unutar [[]], možemo pristupiti određenom dijelu izraza "s kraja", bez obzira na to koja mu je duljina:

(Subscript[{1,6,7,4,5,2}, [[-1]]])

(Subscript[{1,6,7,4,5,2}, [[-2]]])

S [[0]] dobijemo head (u većini slučajeva):

(Subscript[{1,6,7,4,5,2}, [[0]]])

Ako je Length@e==n, tada (Subscript[e, [[i]]]) ima smisla za i∈[-n,n]:

(Subscript[{1,6,7,4,5,2}, [[8]]])

Više dijelova

Navodeći listu unutar [[]], možemo izvaditi više dijelova odjednom. Oni su povezani istim headom kao početni izraz:

(Subscript[(a+b+c+d+e), [[{2,3,-1}]]])

(Subscript[(a b c+d e f+g h i+j k l), [[{1,3},{2,3}]]])

To se često koristi za podmatrice:

matrica64=Array[(Subscript[a, ##])&,{6,4}]

(Subscript[matrica64, [[{2,5},{3,1,4}]]])

Između

Ako želimo dijelove između nekih pozicija, ne moramo pisati sve indekse u listi; možemo navesti specijalni objekt oblika i;;j (tzv. Span). i i j ne moraju biti navedeni; defaultne vrijednosti su 1 i -1, dakle početak i kraj izraza na toj razini.

(Subscript[matrica64, [[2;;4]]])

(Subscript[matrica64, [[3;;,;;-3]]])

(Subscript[matrica64, [[(;;),{2,4}]]])

U zadnjem primjeru moramo upotrijebiti zagrade da ne bismo zbunili parser. Jednostavnije je upotrijebiti All:

(Subscript[matrica64, [[All,{2,4}]]])

S korakom

Span-ovi se mogu pisati i u obliku i;;j;;k, gdje k predstavlja korak (defaultni korak je naravno 1):

(Subscript[matrica64, [[2;;-1;;2,;;;;2]]])

Pridruživanje

Svi gornji oblici mogu se upotrijebiti na lijevoj strani pridruživanja. S desne strane može biti ne-lista (koja će se replicirati na sva adresirana mjesta), ili lista istog oblika kao i ono što bi vratila lijeva strana:

suma=a+d+g+j+m

(Subscript[suma, [[2]]])=f

suma

(Subscript[suma, [[-2;;]]])=x

suma

(Subscript[suma, [[{1,3}]]])={b,h}

suma

(Subscript[suma, [[0]]])=ff

suma

Specijalni slučajevi

Na dubini 1, postoje unarne funkcije na izrazima koje daju često tražene dijelove:

({{First@e, (Subscript[e, [[1]]]), prvi}, {Last@e, (Subscript[e, [[-1]]]), zadnji}, {Rest@e, (Subscript[e, [[2;;]]]), svi osim prvog}, {Most@e, (Subscript[e, [[;;-2]]]), svi osim zadnjeg}})

Most[d+e+f+g+h]

Rest/@{a+b+c,d+e,f+3}

Rest@{a+b+c,d+e,f+3}