Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
pp:haskell-environment [2019/02/15 17:51] lfa add stand-alone |
pp:haskell-environment [2026/04/30 08:54] (current) ldaniel |
||
|---|---|---|---|
| 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 88: | Line 96: | ||
| * - nu vă faceți griji dacă nu întâlniți aceste concepte la primele laboratoare. | * - nu vă faceți griji dacă nu întâlniți aceste concepte la primele laboratoare. | ||
| + | Pe lângă comenzile din GHCI, puteți rula și comenzi bash (exemplu: ls, pwd) folosind formatul '':!<nume> <argumente>''. | ||
| ==== Exemplu de sesiune interactivă ==== | ==== Exemplu de sesiune interactivă ==== | ||
| Line 133: | Line 142: | ||
| ===== Programe stand-alone ===== | ===== 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 scope-ul cursului de Paradigme de Programare. Totuși, pentru cei curioși, puteți începe de aici: | + | 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://learnyouahaskell.com/input-and-output | ||
| Line 139: | Line 148: | ||
| http://book.realworldhaskell.org/read/io.html | http://book.realworldhaskell.org/read/io.html | ||
| - | Fără însă a intra în detalii despre ''IO'', puteți scrie diverse programe utile pornind doar de la următoarele două snippeturi, doar respectând interfața funcției ''myFunction'' și înlocuindu-i definiția cu logica implementată de voi: | + | ==== Useful snippets ==== |
| - | <code haskell> | + | 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: |
| - | import System.IO | + | |
| + | <code haskell> | ||
| {- | {- | ||
| - "myFunction" este punctul de intrare în "programul" vostru. | - "myFunction" este punctul de intrare în "programul" vostru. | ||
| Line 153: | Line 162: | ||
| - $ ./program < input.txt > output.txt | - $ ./program < input.txt > output.txt | ||
| - | - | ||
| - | - În final, rezultatul vostru va trebuie să fie un șir (hint: căutați funcția | + | - În final, rezultatul vostru va trebui să fie un șir (hint: căutați funcția |
| - "show") | - "show") | ||
| -} | -} | ||
| - | myFunc :: String -> String | + | myFunction :: String -> String |
| - | myFunc = undefined -- your logic here | + | myFunction = undefined -- your logic here |
| main = do | main = do | ||
| input <- getContents | input <- getContents | ||
| - | putStr (myFunc input) | + | putStr (myFunction input) |
| </code> | </code> | ||
| Line 177: | Line 186: | ||
| - $ ./program arg1 arg2 arg3 > output.txt | - $ ./program arg1 arg2 arg3 > output.txt | ||
| - | - | ||
| - | - În final, rezultatul vostru va trebuie să fie un șir (hint: căutați funcția | + | - În final, rezultatul vostru va trebui să fie un șir (hint: căutați funcția |
| - "show") | - "show") | ||
| -} | -} | ||
| Line 188: | Line 197: | ||
| </code> | </code> | ||
| + | ==== Hello, world! ==== | ||
| De exemplu, puteți scrie următorul corp de funcție (în oricare dintre snippeturi, deoarece își ignoră parametrul): | De exemplu, puteți scrie următorul corp de funcție (în oricare dintre snippeturi, deoarece își ignoră parametrul): | ||
| <code haskell> | <code haskell> | ||
| Line 196: | Line 206: | ||
| <code> | <code> | ||
| - | $ ghc args.hs -o myFirstProgram | + | $ ghc main.hs -o myFirstProgram |
| - | [1 of 1] Compiling Main ( args.hs, args.o ) | + | [1 of 1] Compiling Main ( main.hs, main.o ) |
| Linking myFirstProgram ... | Linking myFirstProgram ... | ||
| $ file myFirstProgram | $ file myFirstProgram | ||