Erlang letöltés windowsra: http://erlang.org/download/otp_win64_20.0.exe Kezdés: 1 verzió. - Notepad++ és Erlang indítása a gépen - Notepad++: új fájl létrehozása és mentése main.erl néven a D:/ meghajtóra. A fájl tartalma legyen: -module(main). -export([main/0]). main() -> io:format("Hello, world!~n"). - Erlang shellben: "1>" után beírni cd("D:/"). és c(main). - Majd: main:main(). 2. verzió. - http://tryerl.seriyps.ru/ - compile to - evaluate Folytatás: Ezek után ezeket a fájlokat fogjuk írni, fordítani és futtatni. Hogy hívnak: Módosítsuk a fájlt, hogy ne csak az írja ki, hogy Hello Word, hanem a nevünket is! io:format("Hello, world!~n Hello: ~p~n", ["Tóth Melinda"]). vagy X = "Tóth Melinda", io:format("Hello, world!~n Hello: ~p~n", [X]). Számológép: A négy alapművelet használható az alábbi jelekkel: * (szorzás), / (osztás), + (összeadás), - (kivonás) Írd ki, hogy mennyi 144 szorozva 144-gyel! Írd ki hány éves vagy te és a testvéreid összesen! Hány perc van egy napban? Hány perc van egy hónapban? Hány perc van egy évben? Hány perc van egy szökőévben? Függvények: Egy függvény egy névből, paraméteekből és törzsből áll: plusz(A, B) -> A + B. Név: plusz Paraméter: A, B Törzs: A+B Írjunk függvényt, mely kap két számot és eldönti, hogy osztható-e az egyik szám a másikkal. (6 osztható 2-vel, mivel el tudom osztani két egyenlő részre: 3 + 3) Segítség: rem függvény, mely egész osztás maradékát adja meg, azaz ha egyenlő részekre osztanám, akkor mi maradna. (7 rem 2) = 1, mivel el tudom osztani 2 részre úgy, hogy 3 + 3, de még marad 1: 7 = 3+3+1 Akkor osztahtó egyik szám a másikkal, ha az osztási maradék 0. 4 osztható 2-vel, mert (4 rem 2) == 0 Függvények meghívása: A függvényeket meghívhatjuk konkrét értékekkel: plusz(1,2), ennek az eredménye 3 lesz. Ha ezt írjuk: io:format("1+2: ~p~n", [plusz(1, 2)]). Akkor ezt fogjuk látni: 1+2: 3 Hívjuk meg az előbb definiált függvényt úgy, hogy visszaadja, hogy 12 osztható-e 4-gyel! Szökőév: Használjuk az előző függvényt, hogy eldöntsük, hogy 2017 szökőév-e? 2004 az volt? 2100 szökőév? Az oszthatóság függvényünk alapján az lenne, de 2100 valójában nem az. Miért? Írjunk függvényt, mely eldönti, hogy egy szám osztható-e néggyel, de nem osztható százzal! Segítség: and művelet: A and B azt jelenti, hogy A is és B is igaz. Peldaul a hat oszthato 3-mal és 2-vel is: oszthato(6,3) and oszthato(6,2) Segítség: not művelet: not A azt jelenti, hogy A nem igaz Például: not oszthato(5, 3), azt jelenti öt nem osztható hárommal Mostmár el tudjuk dönteni, hogy 2100 mégsem szökőév. Mi a helyzet 2000-rel. Osztható 4-gyel, és osztható 100-zal, így nem kellene szökőévnek lennie, de mégis az. Azért, mert 400-zal osztható. Tehát a teljes szabály: vagy osztható 400-zal, vagy osztható néggyel, de nem osztható 100-zal. Írj függvényt szokoev neven, mely barmely számról el tudja dönteni, hogy szökőév-e... Feltételes kifejezés: A = feltétel, if A -> igaz_resz; not A -> hamis_resz end. Írjunk függvényt, mely kiszámolja az év perceit. Ha szökőév, akkor 366 nap van egy évben, ha nem szökőév, akkor 365. Locsolás: Írjunk függvényt, mely eldönti, hogy hány locsoló vízre van szükségem, ha 2 literes a locsolóval szeretnék öntözni virágokat úgy, hogy minden virág 2 dl vizet kap. Segítség: 10 dl = 1l Írd ki, hogy hány locsoló víz kell, ha 500 tő virágom van! Listák: Eddig csak számokkal dolgoztunk, de tekinthetünk több számot (vagy bármilyen elemet) is egyszerre. Ezeket listáknak nevezzük: [1,2,3,4,5] Ha adott egy listám valamilyen számokkal, akkor azokon elvégezhetek különböző műveleteket. Például, ha egy lista elemeit meg akarom eggyel növelni, akkor úgy járok el, hogy megnövelem először az első elemet, majd a lista többi elemét. Ezt úgy hívják rekurzió. novel([Elso|Maradek]) -> [Elso + 1| novel(Maradek)]; novel([]) -> []. Ha már üres a lista ([]), az azt jelenti, hogy nincs mit csinálnom, tehát az eredmény is []. Írj olyan függvényt, mely megszorozza 3-mal a lista minden elemét. Írj olyan függvényt, mely kap egy listát és egy másik értéket paraméternek, és azzal a kapott értékke szorozza meg a lista minden elemét. Írj függvényt, mely összeadja a lista elemeit. Írj függvényt, mely összeszorozza a lista elemeit. Lista előállítása: lists:seq(1, 10) -> eelőállít egy listát, amiben 1-től 10-ig aza összes szám benne van: [1,2,3,4,5,6,7,8,9,10] Írj függvényt, mely előállítja a számokat két tetszőleges szám között! Hívd meg a definiált függvényt, és írasd ki a listát 100 és 200 között. Lista generátorok: [mit_csinaljak || milyen elemre <- honnan vegyem az elemet, milyen feltétel mellett] A lista generátorok egyszerű rekurziv függvényeket helyettesítenek, amikor a lista elemeit akarjuk módosítani. Például a lista eleminek a megnövelése: [ Elem + 1 || Elem <- lists:seq(1, 10)] A páros számok megövelése eggyel: [Elem + 1 || Elem <- lists:seq(1, 10), X rem 2 == 0] Írj függvényt, mely a páros számokat megszorozza 5-tel. Írj függvényt, mely a páratlan számokat mgszorozza 4-gyel. Párok: A párokat kapcsos zárójelek közé tesszük: {1, 2}. Ha elő akarok állítani egy listát, melyben ben az {1,1}. {2,2}, ... párok vannak, akkor: [{X, X} || X <- lists:seq(1, 10)] Írj listagenerátort, mely olyan párokat állít elő, melyben benne van a szám és a számnál egyel bagyobb szám! Írd meg ezt a függvényt úgy, hogy a hazsnálod a novel függvényt. Dominók: Írj függvényt, mely 1 és 6 között párosítja a számokat: Segítség: lehet két változó és két generátor: [{X, Y} || X <- [1,2], Y <- [5, 6, 7]] Írj függvényt, mely előállítja a dominókat! (Azaz az előző függvényt annyival kell kiegészíteni, hogy ne legyenek benne ismétlődések: azaz ha benne van az {5,6}, akkor a {6, 5} már nem kell.) Napok: Írj függvényt mely előállítja az év hónap-nap párjait: [{1,1}, {1, 2}, ..., {1, 31}, {2, 1}, ...] Segítség: van ++ művelet, mely két listát fűz össze. [1, 2] ++ [3] = [1,2,3] Kommunikáló egyének: Párhuzamos függvény elindítása: spawn(fun valami/0) Üzenet küldés: kinek ! mit Üzenet fogadás: receive mit -> mit_csinaljak end Feladat: Finn és Jake beszélget. Finn megkérdezi milyen az idő, erre Jake azt mondja Játék idő van, majd Finn helyesel! jake() -> receive {milyen_az_ido, Finn} -> io:format("Jake: Jatek ido van!~n"), Finn ! jatek_ido end. finn(Jake) -> En = self(), io:format("Finn: Milyen az ido?~n"), Jake ! {milyen_az_ido, En}, receive jatek_ido -> io:format("Finn: Helyes! Menjunk jatszani!~n"); _ -> nem_ertem end. kezdodik_a_jatek() -> Jake = spawn(fun jake/0), spawn(fun () -> finn(Jake) end).