Apostrofy, řetězce a zpožděné vyhodnocování

Maple používá 3 druhy apostrofů:

" slouzi k zapisu textu do výstupu:

> "adam!:=muz";

> "adam!"; #toto jsou vse texty a neni zde zadne prirazeni

> "adam!":=muz; #s textem nelze pracovat jako s proměnnou

Error, invalid left hand side of assignment

` slouží k zápisu řetězců, např. proměnných s neobvyklými indentifikátory nebo jmen souborů

> `adam!:=muz`; #toto take neni prirazeni

> `adam!`;

`adam!:=muz`

`adam!`

> `adam!`:=muz; #zatimco tady prirazeni je

> adam; #pozor zde musim pouzit take apostrofy

> `adam!`; #tady to uz bude fungovat

`adam!` := muz

adam

muz

je vyhodné si uvědomit rozdily

> aa:=5;
`aa`; #to je obdoba zapisu: a;
"aa"; #toto je text, vsimete si i jineho fontu pro text a promene zde i vyse

aa := 5

5

tady je další ukázka použití apostrofu

> `zarizeni`, `:`, `adresar\\nazev.souboru`;

zarizeni, `:`, `adresar\\nazev.souboru`

Při prvním čtení lze vynechat -- znak \

' umožňuje zpožděné vyhodnocování výrazu

> x:=3;

> vyraz1:=(x+1)^3;

> vyraz2:=('x'+1)^3;

> eval(vyraz2);

x := 3

vyraz1 := 64

vyraz2 := (x+1)^3

64

Stejně to samozřejmě musí fungovat i pro symbolicky zadané x .

> x:=(a+b)^2;

> vyraz1:=(x+1)^3;

> vyraz2:=('x'+1)^3;

> eval(vyraz2);

x := 100

vyraz1 := 1030301

vyraz2 := (x+1)^3

1030301

Tento apostrof je velmi důležitý - používá se i pro tzv. odebrání hodnoty proměnné .

Nepoužitá proměnná "nemá hodnotu", což je reprezentováno tím, že má za hodnotu svůj identifikátor

(platí i pro pole):

> restart; # pro jistotu uklidime

> k;

> a[2];

k

a[2]

Přiřadíme-li proměnné hodnotu, nelze ji použít jako lokální proměnnou v některých funkcích:

> k:=2;

k := 2

> sum(k^2, k=1..5);

Error, (in sum) summation variable previously assigned, second argument evaluates to 2 = 1 .. 5

Inertní forma sumy (` Sum ` s velkým S) nám odhalí důvod:

> Sum(k^2, k=1..5);

Sum(4,2 = 1 .. 5)

Nápravu přinese již zmíněné zpožděné vyhodnocení (musíme zpozdit i vyhodnocení prvního argumentu,

který by jinak byl 2^2 ):

> Sum('k^2', 'k'=1..5)=sum('k^2', 'k'=1..5);

Sum(k^2,k = 1 .. 5) = 55

Jiné řešení přináší ODEBRÁNÍ HODNOTY:

> k:='k';

k := 'k'

Po tomto příkazu proměnná k "nemá hodnotu", stejně jako na začátku práce.

> Sum(k^2, k=1..5)=sum(k^2, k=1..5);

Sum(k^2,k = 1 .. 5) = 55

K odebrání hodnoty slouží i funkce unassign, kterou je však nutno napřed přečíst z knihovny pomocí

readlib(unassign);

Ve skutečnosti by se měly apostrofy používat téměř všude, kde chceme lokálně použít identifikátor,

ale zápis by tím ztratil na přehlednosti. Proto mnohde používáme pouze proměnnou bez hodnoty

a očekáváme, že její identifikátor dostaneme coby její hodnotu.