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; #zatimco tady prirazeni je
> adam; #pozor zde musim pouzit take apostrofy
> `adam!`; #tady to uz bude fungovat
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
tady je další ukázka použití apostrofu
> `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);
Stejně to samozřejmě musí fungovat i pro symbolicky zadané .
> x:=(a+b)^2;
> vyraz1:=(x+1)^3;
> vyraz2:=('x'+1)^3;
> eval(vyraz2);
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];
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;
> 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);
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);
Jiné řešení přináší ODEBRÁNÍ HODNOTY:
> 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);
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.