Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:pp:haskell:lab-io [2018/06/03 22:26]
esimon [Zadania]
pl:dydaktyka:pp:haskell:lab-io [2020/04/27 08:50] (aktualna)
msl [Uwaga na return]
Linia 21: Linia 21:
  
 Zwróć uwagę na nagłówek funkcji main, która jest typu IO i zwraca () -- coś na wzór //void//. Zwróć uwagę na nagłówek funkcji main, która jest typu IO i zwraca () -- coś na wzór //void//.
-IO to specjalna wbudowana monada (podobnie jak Maybe+IO to specjalna wbudowana monada, co to naprawdę jest monada, dowiemy się w kolejnym odcinku, na dzisiaj wystarczy nam uznać, że monada to jakaś wartość opakowana w kontekst. Inne przykład opakowania ​(monady), który już znamy, to ''​Maybe'',​ które opakowuje wartość w sposób umożliwiający wyrazić brak wartości. W przypadku ''​IO'',​ opakowane są wszystkie wartości pochodzące spoza programu - innymi słowy wejście i wyjście. 
-Funkcja main jest tak naprawdę //​akcją ​IO//, czyli komponentem programu zintegrowanym ​ze //światem zewnętrznym//który ​może potencjalnie mieć wpływ na zmianę stanu tego świata zewnętrznego.+Funkcja ​''​main'' ​jest tak naprawdę //​akcją ​wejścia-wyjścia//, jedynym miejscem w programie, który ma bezpośredni kontakt ​ze światem zewnętrznym, ​mając dostęp do monady IO. Funkcja ''​main'' ​może przekazywać tę monadę innym funkcjom lub sama wypakowywać wartości z monady i przekazywać je dalej.
  
-Analogicznie ​funkcja wczytująca napis z klawiatury, ​będzie akcją zdefiniowaną ​jako:+Przykładem wypakowania wartości z monady IO jest funkcja wczytująca napis z klawiatury, ​zdefiniowana ​jako:
  
 <​code>​ <​code>​
Linia 30: Linia 30:
 </​code>​ </​code>​
  
-Czyli, jest akcją ​typu IO i zwraca String.+Innymi słowy, jest to //​akcja// ​typu IO i zwraca String. Akcjami będziemy dzisiaj nazywać funkcje operujące na monadach.
 ===== Interakcja z użytkownikiem ===== ===== Interakcja z użytkownikiem =====
 Przykład najprostszej interakcji z użytkownikiem:​ Przykład najprostszej interakcji z użytkownikiem:​
Linia 49: Linia 49:
 main =   ​putStrLn "​Hello,​ what's your name?" >> (  getLine ​ >>= (\ name ->  putStrLn $ "Hello " ++ name ++ " good to see you!"​)) main =   ​putStrLn "​Hello,​ what's your name?" >> (  getLine ​ >>= (\ name ->  putStrLn $ "Hello " ++ name ++ " good to see you!"​))
 </​code>​ </​code>​
 +
 +''>>''​ łączy akcje, gdzie wynik pierwszej akcji nie ma wpływu na drugą. ''>>​=''​ natomiast przekazuje wynik jednej akcji do kolejnej. Oba te operatory umożliwiają łańcuchowanie akcji - notacja ''​do''​ sprawia, że kod wygląda czytelniej. ​
  
  
Linia 64: Linia 66:
  
 Polecenie return w bloku **do** nie kończy wcale wykonywania kodu i nie powoduje zwrócenia wartości na zewnątrz bloku. Polecenie return w bloku **do** nie kończy wcale wykonywania kodu i nie powoduje zwrócenia wartości na zewnątrz bloku.
-Jest ono traktowane jak kolejna akcja, która w przypadku powyżej nie robi nic.+Jest ono traktowane jak kolejna akcja, która w przypadku powyżej nie robi nic. Co naprawdę znaczy ''​return''​ w haskellu, dowiemy się na następnych zajęciach.
  
 ===== Pliki ===== ===== Pliki =====
Linia 137: Linia 139:
  
 main = do main = do
 +-- ''​randomIO''​ odwołuje się do świata zewnętrznego,​ używając go jako ziarna do generacji losowej liczby.
     num <- randomIO :: IO Int     num <- randomIO :: IO Int
     print num     print num
Linia 142: Linia 145:
   - Napisz program odwracający i wyświetlający napis, który wcześniej został podany przez użytkownika. Program powinien wczytywać i odwracać stringi do czasu, aż użytkownik poda pustą linię.   - Napisz program odwracający i wyświetlający napis, który wcześniej został podany przez użytkownika. Program powinien wczytywać i odwracać stringi do czasu, aż użytkownik poda pustą linię.
   - Napisz program wczytujący plik i zapisujący jego zawartość w wersji CAPSLOCK   - Napisz program wczytujący plik i zapisujący jego zawartość w wersji CAPSLOCK
-  - Napisz program czytający plik i zapisujący w osobnym pliku słowa, które nie występują w '/​usr/​share/​dict/​words'​. Sprawdzanie nie powinno być case-sensitive.+  - Napisz program ​typu //​spellchecker//, ​czytający plik tekstowy, znajdujący w nim słowa, które nie występują w ''/​usr/​share/​dict/​words''. Sprawdzanie nie powinno być case-sensitive. Znalezione //​błędne//​ słowa powinny zostać zapisane w odrębnym pliku.
  
pl/dydaktyka/pp/haskell/lab-io.1528057564.txt.gz · ostatnio zmienione: 2019/06/27 15:54 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0