Programowanie przy użyciu reguł

"="

x=3

x+b

?x

f[a,b[c]]=3

1+f[a,b[c]]

Clear[a1]
{1+f[a1,b1[c1]],1+f[a,b[c1]]}

Clear[g,x]

g[y]=y^2

{g[y],g[z],g[3]}

"=" (lub Set) przypisuje nagłówkowi symbolu po lewej stronie regułę, mówiącą o tym, że ta i tylko ta konfiguracja symboli (wyrażenie) ma zostać zastąpiona przez prawą stronę.

?g

g[x]=x^3

?g

?x
?y

Czego nie można zrobić

a+b=c
2=3

FullForm[a+b]

Plus[a,b]=c

":="

x:=3

?x

Clear[x]

FullForm[Print["Prawa strona obliczona!"]]

x=Print["Prawa strona obliczona!"];
?x

x+1

x:=Print["Prawa strona obliczona!"];
?x

x

x^2 x x

Trace[x]

x+1

":=" działa jak "=" z tą różnicą, że nie oblicza prawej strony.

a1:=b+b
?a1

a2=b+b
?a2

Clear[f,x,y]
f[x]=x^2
f[2]=2^2
f[3]=3^2

"_"

Clear[f,A,x]
f[_]=A

{f[3],f[c[a]]}

?f

f[x_]=x^2

{f[x],f[y],f[3]}

?f

Clear[f,x,y]

f[x]="Tutaj x"
f[y]="Tutaj y"
f[_]="Tutaj coś innego"

{f[x],f[y],f[z],f[abc[pqr]]}

?f

Pułapka

Clear[f,x]
x=3;
f[x_]=x^2;

?f

f[a](*chcielibyśmy mieć a^2*)

Clear[x,f,y,z]
x=3;
f[x_]:=x^2

{f[x],f[y],f[z]}

?f

Clear[f1,f2]
f1=Function[x,x^2];
f2[x_]:=x^2;

?f1
?f2

{f1[a],f2[a]}

{Head[f1],Head[f2]}

{f1,f2}

Clear[f]
f[x_]:=1/x
f[0]:=0

?f

{f[a],f[3],f[0]}

Clear[f]
f[_,2]:="bla"
f[2,_]:="blabla"

f[2,2]

?f

f[2,2]

Podmiana warunkowa

Clear[f]
f[n_]:=f[n-1]+1
f[0]:=0

?f

Trace[f[2]]

Clear[f]
f[n_/;n>0]:=f[n-1]+1
f[0]:=0

?f

Trace[f[2]]

Trik (programowanie dynamiczne)

Clear[f]
f[n_/;n>0]:=f[n]=f[n-1]+1
f[0]:=0

?f

f[3]

?f