Na własnym laptopie można zainstalować GHC(i) korzystając z narzędzia ghcup
np.
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
- uruchamianie
- obliczanie wyrażeń
- podstawowe komendy: :h[elp] :t[ype] :l[oad] :r[eload] :q[uit
- odkrywamy Haskell (notatki na moodle) ew. tutorial: Learn You A Haskell
- klawiszologia: C = Control, M = Meta (Escape lub Alt) S = Shift (E-M-A-C-S)
- wyjście:
C-x C-c
- tutorial
C-h t
- otwarcie (kolejnego) pliku
C-x C-f
- przejście do innego bufora
C-x b
lubC-x C-b
- podział okna: w pionie
C-x 2
w poziomieC-x 3
cofniecieC-x 1
lubC-x 0
- przejscie do kolejnego fragmentu okna
C-x o
- zaznaczanie
C-spacja
, kopiowanieM-w
wycinanieC-w
wklejanieC-y
- więcej: EmacsWiki, UChicago Emacs tutorial
- dla tych, którzy wczesniej uzywali vima, jest evil mode i spacemacs
- instalacja
- Podczas edycji pliku .hs
C-c C-l
ładuje go w interpreterze (ew. dzieląc okno),C-x o
przełącza do drugiego okna.
Można użyć rozszerzenia Haskell
, ale trzeba uważać z autouzupełnianiem.
Warto zwrócić uwagę na obliczanie wyrażeń przy użyciu -- >>>
w kodzie (prawie jak doctest)
Przećwiczyć elementy zawarte w notatkach: obliczanie wyrażeń,wycinanki listowe, definiowanie funkcji, silnia, let, lambda, operatory
- Napisz funkcję
countdown
, która dla danej liczby naruralnej będzie "odliczać" od tej liczby do 0, np.
> countdown 9
[9,8,7,6,5,4,3,2,1,0]
- Napisz funkcję
collatz
, która dla danej liczby da jej sekwencję Collatza, np
> collatz 17
[17,52,26,13,40,20,10,5,16,8,4,2,1]
- Standardowa funkcja
last
daje ostatni element swojego argumentu. Czy potrafisz napisać własną implementację tej funkcji?
-
Napisz własne odpowiedniki standardowych funkcji
head, tail, ++, take, drop, filter, map, concat
-
Napisz funkcję
inits
, ktora dla danej listy da listę wszystkich jej odcinków początkowych, np.inits [1,2] == [[],[1],[1,2]]
-
Napisz funkcje
partitions
, ktora dla danej listyxs
da liste wszystkich par(ys,zs)
takich, żexs == ys ++ zs
-
Napisz funkcje
permutations
, która dla danej listy da listę wszystkich jej permutacji (dla uniknięcia niejasności możemy założyć, ze wszystkie elementy listy wejściowej są różne) -
Napisz funkcje
nub
, ktora usunie z listy wszystkie duplikaty, npnub [1,2,1,3,1,2,1,4] == [1,2,3,4]
Możliwe jest wiele rozwiazań, ale przyjmijmy, że funkcja nub pozostawia pierwsze wystąpienie danej wartości, a usuwa powtórzenia.
Po skończeniu działu 'Haskell 0' można ew. zacząć zadania z 'Haskell 1'