Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pp:haskell-environment [2019/02/15 16:19]
lfa add set +t
pp:haskell-environment [2019/02/15 18:06] (current)
lfa [Useful snippets]
Line 4: Line 4:
  
 Primul pas spre a putea învăța Haskell este să avem o modalitate de a rula codul scris. Puteți descărca platforma Haskell de [[https://​www.haskell.org/​platform|aici]] (Windows/OS X/Linux) sau puteți căuta pachetul "​ghc"​ în repourile distribuției voastre. Primul pas spre a putea învăța Haskell este să avem o modalitate de a rula codul scris. Puteți descărca platforma Haskell de [[https://​www.haskell.org/​platform|aici]] (Windows/OS X/Linux) sau puteți căuta pachetul "​ghc"​ în repourile distribuției voastre.
 +
 +<note tip>
 +Cel mai probabil, ar trebui să rulați:
 +
 +<​code>​
 +$ sudo apt-get install ghc
 +</​code>​
 +</​note>​
  
 [[https://​wiki.haskell.org/​GHC|GHC]] este un compilator de Haskell, similar cu gcc. Pentru început, nu vom compila programe, ci vom rula în modul interactiv, care ne permite să apelăm funcții din consolă și să vedem rezultatul lor. Putem să încărcăm și fișiere cu fragmente de cod din care să apelăm funcții definite de noi.  [[https://​wiki.haskell.org/​GHC|GHC]] este un compilator de Haskell, similar cu gcc. Pentru început, nu vom compila programe, ci vom rula în modul interactiv, care ne permite să apelăm funcții din consolă și să vedem rezultatul lor. Putem să încărcăm și fișiere cu fragmente de cod din care să apelăm funcții definite de noi. 
Line 130: Line 138:
 *Main Data.Char>​ :q *Main Data.Char>​ :q
 </​code>​ </​code>​
 +
 +===== Programe stand-alone =====
 +
 +Pentru a face programe utile, de sine-stătoare,​ care nu depind de mediul interactiv din GHCi, este nevoie de intearcțiune cu lumea externă (argumente, fișiere, variabile de mediu etc). Interacțiunea cu lumea externă în Haskell este un concept stufos și complex care depășește nivelul cursului de Paradigme de Programare. Totuși, pentru cei curioși, puteți începe de aici:
 +
 +http://​learnyouahaskell.com/​input-and-output
 +
 +http://​book.realworldhaskell.org/​read/​io.html
 +
 +==== Useful snippets ==== 
 +
 +Fără însă a intra în detalii despre ''​IO'',​ puteți scrie diverse programe utile pornind de la următoarele două snippeturi, doar respectând interfața funcției ''​myFunction''​ și înlocuindu-i definiția cu logica implementată de voi:
 +
 +<code haskell>
 +{-
 + - "​myFunction"​ este punctul de intrare în "​programul"​ vostru.
 + -
 + - Funcția primește un șir care reprezintă întreg conținutul stdin și întoarce
 + - un șir care va fi scris la stdout. Pentru a lucra cu alte fișiere, puteți folosi
 + - redirectări de shell:
 + -
 + - $ ./program < input.txt > output.txt
 + -
 + - În final, rezultatul vostru va trebui să fie un șir (hint: căutați funcția
 + - "​show"​)
 + -}
 +myFunction :: String -> String
 +myFunction = undefined ​ -- your logic here
 +
 +main = do
 +    input <- getContents
 +    putStr (myFunction input)
 +</​code>​
 +
 +<code haskell>
 +import System.Environment (getArgs)
 +
 +{-
 + - "​myFunction"​ este punctul de intrare în "​programul"​ vostru.
 + -
 + - Funcția primește o listă de șiruri care reprezintă argumentele date
 + - programului în linia de comandă. Spre deosebire de C, aceasta nu conține și
 + - numele programului,​ deci poate fi și goală. Rezultatul funcției va fi scris
 + - la stdout. Pentru a lucra cu alte fișiere, puteți folosi redirectări de shell:
 + -
 + - $ ./program arg1 arg2 arg3 > output.txt
 + ​- ​
 + - În final, rezultatul vostru va trebui să fie un șir (hint: căutați funcția
 + - "​show"​)
 + -}
 +myFunction :: [String] -> String
 +myFunction = undefined ​ -- your logic here
 +
 +main = do
 +    args <- getArgs
 +    putStr (myFunction args)
 +</​code>​
 +
 +==== Hello, world! ====
 +De exemplu, puteți scrie următorul corp de funcție (în oricare dintre snippeturi, deoarece își ignoră parametrul):​
 +<code haskell>
 +myFunction _ = "​Hello,​ world!\n"​
 +</​code>​
 +
 +Presupunând că fișierul ce conține ''​main''​ se intitulează ''​main.hs'',​ îl putem compila astfel:
 +
 +<​code>​
 +$ ghc main.hs -o myFirstProgram
 +[1 of 1] Compiling Main             ( main.hs, main.o )
 +Linking myFirstProgram ...
 +$ file myFirstProgram
 +myFirstProgram:​ ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /​lib64/​ld-linux-x86-64.so.2,​ for GNU/Linux 3.2.0, BuildID[sha1]=bcaf317a9ff9eb7b3cf09e9cae
 +337d10eeb268c3,​ not stripped
 +$ ./​myFirstProgram
 +Hello, world!
 +$
 +</​code>​
 +
 +Felicitări,​ ați obținut primul program Haskell!
 +
 +<note tip>
 +În loc să compilăm si să obținem un executabil, putem să interpretăm neinteractiv programul, folosind ''​runghc''​ sau ''​runhaskell'':​
 +
 +<​code>​
 +$ runhaskell ./main.hs
 +Hello, world!
 +$
 +</​code>​
 +</​note>​