Prelude.not
Prelude.&&
(Prelude.||)
[*]Prelude.fst
Prelude.not
Logikai tagadás:
Egy függvényt több alternatívával (vagy szabállyal) is definiálhatunk. A függvényalternatíváknak egymás mellett kell elhelyezkedni a modulban.
A függvényparaméterek helyén minták vannak. A minta fogalmával a következő diákon ismerkedünk meg.
A függvényalternatívákat a kiértékelés során fentről lefelé próbáljuk végig.
Minta lehet:
x
, xs
, y
, a
, …_
True
, 0
, (a, b)
, …A joker és a változó minden kifejezésre illeszkedik.
Prelude.&&
Logikai ÉS egyszerűbben:
Logikai ÉS másként:
(Prelude.||)
[*]Definiáljuk újra a (||)
operátort!
Itt is el kell rejteni a (||)
eredeti definícióját:
A ...
helyén további elrejtendő definíciók lehetnek.
Definiáljuk a kizáró VAGY függvényt!
Prelude.fst
Párokra illeszthető minta: (
x,
y)
.
Példák:
Használat:
Cseréljük meg egy pár két elemét!
Tükrözzünk egy pontot az x tengelyre!
scale' t
legyen origó középpontú t-vel történő nagyítás!
Tükrözzük a második pontot az első pontra!
Számoljuk ki két pont távolságát!
Az abszolút érték függvény:
A négyzetgyökvonás:
Különböző típusú értékekre illeszthető minták:
Integer
: …, -2
, -1
, 0
, 1
, 2
, …
Double
: …, -2
, -1
, 0
, 1
, 2
, …, 4.3
, …
Char
: 'x'
, '\n'
, …
String
: ""
, "abc"
, …
Definiáljuk a moduló 3 szorzást mintaillesztéssel!
Definiáljunk egy függvényt, amely egy sortörést egy szóközre cserél!
Definiáljunk egy függvényt, amely minden sortörést szóközre cserél!
Definiáljunk egy függvényt, amely az “a” és “az” szót felcseréli!
Definiáljunk egy függvényt, amely az összes “a” és “az” szót felcseréli!
Segítség: Használjuk a words
, unwords
függvényeket.
Üres lista minta: []
Egyelemű lista minta: [
a]
Kételemű lista minta: [
a,
b]
…
Nemüres lista minta: a:
b
Példák (Prelude
függvények):
Használat:
A listák két alapvető mintája, amelyből felépíthető a többi:
[]
:
tA h:t
mintában a h
és a t
két tetszőleges minta lehet, tehát ez egy összetett minta.
Szemantika:
[]
az üres listákra illeszkedikh:t
minta akkor illeszkedik, ha a lista nem üres: a h
minta illeszkedik a lista fejére, a t
minta pedig illeszkedik a lista törzsére.A kettőspont típusa:
Tehát ha h:t
típusa [x]
, akkor h
típusa x
, t
típusa pedig [x]
.
A kettőspont jobbra köt!
Definiáljuk az “1 elemű-e a lista” függvényt mintaillesztéssel!
Egy tetszőleges szót alakítsunk át úgy, hogy nagybetűvel kezdődjön! A megoldásban használjuk a Data.Char
modul toUpper
függvényét!
Egy tetszőleges szöveg minden szavát alakítsuk át nagybetűvel kezdődőre!
Minták halmazkifejezésekben is alkalmazhatóak. Erre egy intuitív példa:
Számoljuk meg az “a” szavakat egy szövegben!
Számoljuk meg azokat a párokat egy listában, amelyekben a pár elemei közötti távolság legalább 2!
Vegyük egy lista minden 5. elemét!
Megjegyzés: Használhatjuk a zip
függvényt.