Funkcje są podstawowym narzędziem ułatwiającym wykonywanie skomplikowanych zadań. Dzielimy cale zadanie na prostsze czynnosci które potrafimy wykonać ręcznie, a następnie piszemy funkcje które wykonają je automatycznie.
Bardzo prosty przykład: zakładam, że potrafimy dodać trzy liczby w Mathematice, np:
podobnie dodajemy trzy symbole:
Teraz chcemy napisać funkcję która dodaje trzy składniki, np: x, y, z. Standardowa składnia wygląda następująco:
Podsumowanie składni:
dodaj3 - nazwa funkcji
[] - argumenty funkcji zawsze w nawiasach kwadratowych
x_ - pierwszy argument składa się z nazwy (x) i symbolu podkreślenia (_)
:= - symbol dwukropek i ,,równa się’’ poprzedza definicję funkcji
x+y+z - to co funkcja ma zrobić: dodać trzy symbole
Przykładowe wywołanie funkcji:
Warto zwrócić uwagę na fakt, iż funkcja która dodaje 3 (i dowolną ilość) symboli istnieje już w Mathematice : jest to Plus:
Powyższa sytuacja zdarza się często, gdyż Mathematica posiada bardzo rozbudowany język. Czasem szybciej jest napisać jednak własną funkcję, niż doszukać się jej w dokumentacji. Innym powodem pisania własnych funkcji może być chęć ich np. przyspieszenia.
Inne sposoby definiowania funkcji:
Przykład: funkcja generująca losową sekwencję DNA.
Na początek sprawdzamy czy potrafimy wygenerować jeden losowy nukleotyd. Mozna to zrobić za pomocą RandomChoice (losowy wybór z listy). Każdorazowe wywołanie może dać inny wynik:
Teraz chcemy wygenerować listę np: 10 takich losowych nukleotydów, za pomocą Table:
Listę należy ,,posklejać’’ aby utworzyć jeden łańcuch tekstowy:
Można to zrobić na raz w ten sposób:
lub w ten:
lub jeszcze inaczej:
Nazwijmy funkcję wykonującą te czynności randomDNA. Jej ,,wnętrze’’ (ang. body, ciało) najprościeś wkleić metodą Ctrl+C Ctrl+V.
Nieco bardziej skomplikowana funkcja rozwiązująca podpunkt (a) Zad. 1 z Zestawu 1. Funkcja sprawdza czy podano jej jako argument łańcuch tekstowy ( _?StringQ), i zawiera 5 zmiennych wewnętrznych (dlugosc, czestoscA, czestoscC, czestoscG, czestoscT), tj. niewidocznych poza ,,ciałem’’ funkcji:
Od momentu napisania i przetestowania funkcji, możemy ją uzywać podobnie jak funkcji wbudowanych. Poniższy wykres pokazuje jak zmienia się częstość występowania nukleotydów na początku chromosomu.