Haskellhez programozó környezet?
A ghc a legelterjedtebb fordító. A ghci pedig ennek az interpreter-es ,,üzemmódja'' (bár úgy tudom, a részletek bonyolultak, de én mindenesetre a ghci-t mindig csak afféle gyors interpreteres ellenőrzési dolgokra használtam).
Futtatható állományt a ghc (Glasgow Haskell Compiler) készít, a legtipikusabb parancssori alkalmazás:
ghc --make -o futtathatoallomanykivantneve Main.hs
A Main.hs állományban az alábbiak vannak
module Main where
main = print (fibonacci 7)
Ahogy a példa mutatja, ebben az esetben a Haskell programban van egy főfüggvény (main), ez tartja a külvilággal az I/O kapcsolatot (legalább olyan szinten, hogy a program fő számításának, céljának eredményét valamilyen formában kiírja, esetleg az ehhez szükséges adatokat a felhasználótól bekérve).
A main főfüggvéy meg persze futtatja a kívánt konrét feldattal kapcsolatos függvényeket, aszerint, ahogy Te ezt a main függvényt definiálod. Itt a példában azt írtam le, hogy a fibonacci függvényt alkalmazza a 7-es számra. De persze a main csinálhat ennél többet is, akár egy egész összetett problémával kapcsolatos függvényeket is meghívhatja. A main maga leginkább a futtató könryezettel való kapcsolattartást intézi.
A Haskell tanulásnak van más módja is. Nem kell feltétlenül futtatható állományokat készítened, sőt kihagyhatod ezeket a fenti részleteket is, nem kell törődnöd a futtatási környezettel kapcsolatos részleteket. Használhatod gyakorlásra, sőt egész komoly munkára a Haskellt olyan módon is, ahogy a LISP-et lehet: afféle read-eval-print ciklusban egy értelmező programba rendre beírogatva a kívánt számításokat, figyelve a kiírt eredményeket.
Ebben a másféle használati módban a ghc fordító helyett inkább a ghci által nyújtott interpreteres üzemmódot érdemes használni.
Az a hátránya a ghci interpreternek (a LISP és a különböző szkriptnyelvek interreteihez képest), hogy ugyan beírhatja az ember, hogy fibonacci 7, és a ghci afféle read-eval-print ciklusban ki is írja szépen a begépelt dolgok kiértékelését, eredményeit, de függvénydefiníciókat nem lehet az interpreterbe beírni. De még ha lehetne is, a ghci nem nyúj t olyan kényelmes szerkesztési, javítási, mentési lehetőségeket, hogy érdemes legyen közvetlen az intereterbe írni a függvénydefiníciókat. Csak a már előre egy fájlban külön megírt függvények alkalmazását érdemes vele kipróbálni.
Tehát a ghci használata:
Csinálok egy akarmilyen nevű állományt, nevezzük mondjuk Gyakorlas.hs -nak. (Úgy tudom, nagybetűvel kell kezdődnie, és hs kiterjesztásűnek lennie.
Na most a Gyakorlas.hs-be szövegszerkesztővel előre beírom a gyakorlás alapját képező függvénydefiníciókat. Tehát megírok önállóan vagy könyvből tanulva mindenféle érdekes függvénydefiníciókat. Számból másik számot csinál, listákat átalakít, listában keres valamilyen szempontból, stb:
Pl legyen Gyakorlas.hs tartalma:
maximum x y = if x > y then x else y
szokoztelenit :: String -> String -- (megjegyzés: a típusdeklaráció, tehát ez a sor elhagyható)
szokoztelenit "" = ""
szokoztelenit (x : xs) = if x == ' ' then szokoztelenit xs else x : szokoztelenit xs
Szóval legyen mondjuk ez a Gyakorlo.hs nevű fájlban. Lehet több függvény is, sőt lehet benne annyi függvénydefiníció is, amik egy egész komoly munkaprojekt számításának elvégzését végzik. Más nem kell a fájlba, úgy értem, nem kell sem fejléc, semmi ilyesmi. Csak maguk a függvénydefiníciók, adattípusok, amiket ki szeretnél próbálni.
Na most ha kész a fájl a kívánt függvényekkel, akkor egyszerűen beírom:
ghci Gyakorlas.hs
Ekkor a ghci betölt, és ha valami hiba van, panaszkodik.
És persze kiír egy promptjelet is:
>
na ide beírom:
:quit
(a kezdő kettőspont fontos, innen tudja a ghci, hogy nem a függvényekkel akarok gyakorlatozni, és nem épp véletlenül egy quit nevű függvényt akarok kipróbálni, hanem közvetlenül neki mint futó alkalmazásnak adok parancsot, hogy (jelen esetben) lépjen ki.
Ha kiléptem, módosítom a file-t egy szüövegszerkeztőben, és újra kipróbálom ghci-vel.
Ha a ghci hibajelzés nélkül elfogadta a file-ot, akkor akármit begépelhetek a > promptjel után, ami a függvények kipróbálásával kapcsolatos:
> szokoztelenit "Java Class Declarations"
erre ő visszaírja
"JavaClassDeclarations"
és így tovább:
> maximum 3 7
7
Ha megunom, itt is :quit paranccsal búcszúzhatok el. A file-ot pedig a ghci-től függetlenül bárhogy javíthatom, bővíthetem egy szerkesztőben, a ghci-vel pedig bármikor kipróbálhatom.
Erre a használati módra szorítkozva is sikerült egy szakdolgozati projekt lényegét megírnom (egy kis saját mini-programnyelv interpreterét önállóan kifejlesztenem). Egyre összetettebbek lettek a gyakorlófile függvényei, egyre több függvény hívott meg további segédfüggvényeket, végül elértem oda, hogy megvalósult maga a teljes projektalkalmazásom, amit kívántam (egy lambda-kalkulus-szerű programnyelv értelmezőjét valósítottam meg). Mindehez nem kellett más, csak egy szövegszerkesztő és a hugs (a hugs egy a ghci-hoz hasonló, de annál egyszerűbb szolgáltatású haskell-interpreter volt)
Amikor itt tartottam, akkor egy egész vékony triviális kis módosítással átírtam az egészet olyan alakba, mint amit a legelső pontban írtam (futtatható file, a külvilággal explicit módon kapcsolatot tartó main függvénnyel)
Egyszóval nem feltétlenül kell azonnal ismerned a Haskell I/O-val, main függvénnyel, futtatható állománygenerálással kapcsolatos részleteit ahhoz, hogy akár nagyobb projekteket is megvalósíthass.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!