Napiszmy funkcję, która pozwoli nam obliczyć n-tą potęgęliczby 2 i od razu ją wywołajmy:
(%i2) | npotega2(n):=2^n; | |
npotega2(10); | ||
(%o1) | npotega2(n):=2^n; | |
(%o2) | 1024 |
oraz przyjrzyjmy się funkcji, która pozwoli obliczyć b-tą potęgędowolnej liczby x i też od razu ją wywołamy:
(%i4) | npotegax(x,n):=x^n; | |
npotegax(3,3); | ||
(%o3) | npotegax(n):=x^n; | |
(%o4) | 27 |
Jest to przykład najprostszej funkcji możliwej do napisania. Definiowanie takiej funkcji składa się z podania nazwy funkcji, określenia w nawiasach okrągłych jakie argumenty przyjmuje, zastosowania symbolu przypisania Z:= oraz wyrażenia do obliczenia.
Załóżmy teraz, że interesuje nas, która liczba jest większa. Chcąc otrzymać wynik potrzebujemy instrukcji warunkowej, która nam sprawdzi i zwróci odpowiednią wartość.
(%i6) | zwrocWieksza(a,b):=block(if(a>b) then return(a), return(b)); | |
zwrocWieksza(4,5); | ||
(%o5) | zwrocWieksza(a,b):=block(if(a>b) then return(a), return(b)); | |
(%o6) | 5 |
Po raz pierwszy stosujemy tutaj funkcję block, która określa, że wprowadzamy ciąg instrukcji. block() w nawiasach okrągłych przyjmuje instrukcje oddzielone przecinkiem. Podany przykład wprowadza instrukcję if([...])then [...], która jest instrukcją warunkową. W nawiasy okrągłe wpisujemy warunek, tutaj a > b. Po then możemy wykonać dowolną instrukcję lub wstawić kolejny block. W naszym przypadku używamy return([...]), aby zwrócić wartość podaną w nawiasach okrągłych. Warto nadmienić, że return przerywa wykonywanie bloku, dlatego jeśli a jest większe od b to zwracamy a i kończymy block. Jeśli a jest nie większe niż b to wykonujemy block dalej czyli zwrócimy b.
Maxima to program matematyczny, ale potrafi też wypisywać na ekran teksty. Przypuśćmy, że chcemy wiedzieć czy liczba jest dodatnia:
(%i7) | czyDodatnia(a):=block(if(a>0) then return("TAK"), return("NIE")); | |
czyDodatnia(5); | ||
(%o7) | czyDodatnia(a):=block(if(a>0) then return("TAK"), return("NIE")); | |
(%o8) | TAK |
W tym przykładzie ponownie posłużyłem się funkcją block i if. Jednak w tym przypadku return nie zwraca liczby, a wartość tekstową, która musi być opatrzona w cudzysłowy "".
Przy definiowaniu funkcji wolno nam użyć funkcji if instrukcja po instrukcji. W ten sposób możemy zadeklarować funkcję signum.
(%i10) | sgn(a):=block(if(a>0) then return(1), if(a=0)then return(0), return(-1)); | |
sgn(4); | ||
(%o9) | sgn(a):=block(if(a>0) then return(1), if(a=0)then return(0), return(-1)); | |
(%o10) | 1 |
Instrukcja if pozwala używać symboli operacji logicznych takich jak: spójnik i and, spójnik lub or, albo negacje not. W ten sposób możemy sprawdzić czy któraś z podanych liczb jest większa od 0 używając zaledwie dwóch instrukcji.
(%i11) | czyJakasDodatnia(a,b):=block(if(a>0 or b >0) then return("TAK"), return("NIE")); | |
czyJakasDodatnia(-4,5); | ||
(%o11) | czyJakasDodatnia(a,b):=block(if(a>0 or b >0) then return("TAK"), return("NIE")); | |
(%o12) | TAK |
Napisz poniższe funkcje i przetestuj: