Uvod do funkcionalniho programovani -- IB015

Materialy k prednaskam a cvicenim, literatura (spravuje Libor)
Elektronicka ucebnice Haskellu (spravuje Stanislav Novak)
Dukaz korektnosti programu indukci (fce zacatek)
Dukaz korektnosti programu indukci (fce sq)
Priklady na prevod point-wise definic na point-free a naopak
Priklady na castecnou aplikaci

Dodatecne priklady

Vstup a vystup v Hugsu

O tom, jak je realizovan vstup a vystup se dozvite presne pozdeji na prednaskach. V modulu Main je definovan vyraz Main typu IO(), ktery je spustitelnym programem umoznujicim interakci s vstup/vystupnim (I/O) rozhranim. Na program Main lze pohlizet jako na posloupnost akci nad I/O rozhranim (viz konstrukce do v definici Main).

module Main where

repl :: Int -> Char -> String
repl 0 _ = []
repl x c = c : repl (x-1) c

main::IO()
main = do putStr "Zadejte pocet replikaci (Int): "
          x <- getLine
          putStr "Zadejte replikovany znak (Char): "
          y <- getLine
          putStr "\n Vysledny retezec: "
          putStr (repl (read x) (read y))

Pro vypocet pouziva program Main funkci repl, ktera aplikovana na n a c vraci vyraz typu [Char] vytvoreny n-nasobnou replikaci znaku c.

Priklad mozneho behu tohoto programu nasleduje:

__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-1999
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Report bugs to: hugs-bugs@haskell.org
||   || Version: November 1999  _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Reading file "/packages/share/hugs-98/lib/Prelude.hs":
                   
Hugs session for:
/packages/share/hugs-98/lib/Prelude.hs
Type :? for help
Prelude> :l Main.hs
Reading file "Main.hs":
                   
Hugs session for:
/packages/share/hugs-98/lib/Prelude.hs
Main.hs
Main> main
Zadejte pocet replikaci (Int): 25
Zadejte replikovany znak (Char): '*'

 Vysledny retezec: *************************
Main>