Haskell Składnia funkcji
Prosta funkcja To jest prosta funkcja, która przyjmuje na wejście argument a i zwraca String. Pierwsza linia funkcji to jest jej deklaracja. Gdzie najpierw występuje nazwa funkcji potem typ argumentu a i na końcu typ zwracanej wartości. Druga i trzecia linia działają jak instrukcja warunkowa if.
Switch Ta konstrukcja jest równoważna ze switch znanym z innych języków. Program przechodzi przez wszystkie wszystkie linie i sprawdza zgodność. Ostatnia instrukcja jest odpowiednikiem default czyli jeżeli w poprzednich liniach komputer nie znajdzie dopasowania to zostanie wykonana ostatnia instrukcja. W Haskell każda funkcja musi zwrócić wartość.
Rekurencja w Haskell Niżej jest podana funkcja obliczająca silnie. Druga linia to jest warunek końcowy, a trzecia jest po prostu wzorem silni. Oczywiście że szczegółowe warunki powinny znaleźć się na początku funkcji, a później bardziej ogólne.
Nieobsłużone argumenty funkcji Niżej mamy funkcje charName która w zależności od podanego argumenty zwraca String. W tej funkcji są obsłużone tylko trzy wartości 'a', 'b', 'c' Sprawdzimy jak funkcja charName działa dla argumentów 'a', 'b', 'h'. Funkcja musi zwracać jakąś wartość, dlatego na końcu należałoby dodać instrukcję wyłapująca wszystkie możliwe wartości.
Krotki Jako argumenty funkcji również możemy wykorzystywać krotki. Napiszmy funkcje która doda nam dwa wektory. Taka funkcja na wejście będzie przyjmować dwie pary współrzędnych X i Y(czyli dwie krotki). Niżej jest implementacja z użyciem funkcji pomocniczych fst i snd które zwracają odpowiedni pierwszy i drugi element krotki. Również przy implementacji takiej funkcji możemy korzystać bezpośrednio ze składni Haskell, wtedy implementacja naszej funkcji będzie wyglądać następująco
PATTERN MATCHING Przy implementacji funkcji może się zdarzyć że w jakiejś linii nas interesuje tylko jeden konkretny argument. W takim przypadku możemy na miejsce nie interesującego nam argumentu napisać '_', wtedy haskell potraktuje to jako dowolną wartość. Niżej są podane funkcje first, second i third które zwracają odpowiedni pierwszy, drugi i trzeci element krotki.
Operacje na listach Haskell ma wbudowaną funkcje 'head' która zwraca pierwszy element listy. Teraz my mając do dyspozycji 'PATERN MATCHING' możemy napisać własną implementacje tej funkcji
Operacje na listach Kolejna prosta funkcja, która zwróci nam dwa pierwsze elementy listy (zwraca komunikat jeśli lista jest pusta lub krótsza)
Operacje na listach Implementacja funkcji length z użyciem PATERN MATCHING i rekurencji Jeśli funkcja zostanie wywołana pustej liście to zwróci 0. W przypadku gdy lista jest nie pusta funkcja wywoła samą siebie i jako argument użyje ogon przekazanej listy .
Operacje na listach Implementacja funkcji sum z użyciem PATERN MATCHING i rekurencji Ta funkcja jest nie co podobna do funkcji length, lecz tym razem wykorzystujemy w obliczeniach pierwszy element listy
Guards Guards jest to również konstrukcja bardzo podobna do switch. Gdzie na początku wskazujemy na zmienną którą będziemy porównywać, a potem opisujemy cases w zależności od wartości zmiennej
Guards Inny prosty przykład wykorzystania konstrukcji guards przy implementacji funkcji do obliczenia wartości maksymalnej
Where Konstrukcja where będzie wykonana przed konstrukcją guards i zdefiniuje każdą stałą która jest wykorzystywana w guards
Where Konstrukcja where tak samo jak konstrukcja guards ma zapis krótki
Let Podobne w działaniu do where jest let. Where na końcu funkcji łączy wyrażenie ze zmiennymi.(widoczne jest w całej funkcji). Let również łączy wyrażenie ze zmienną, ale działa bardzo lokalnie ( nie jest widoczne w całej funkcji).
Case Case w haskell jest bardzo podobny do case w innych językach programowania, różni się składnią oraz tym że wynik działania case możemy odrazu zapisać do zmiennej
Case Składnia Wyrażenie jest porównywane ze wzorem,a gdy pasuje podawany jest wynik. Jednak gdy żaden wzór nie będzie pasował do wyrażenia, wówczas pojawi się błąd wykonania.
Dziękuje za uwagę