Ebben a feladatban tudnátok segíteni, mert nem teljesen világos mit kellene benne csinálni?
Összetett minták
Adjunk olyan x0, x1 és x2 kifejezéseket, amelyekre az alábbi függvény rendre 0-t, 1-t, illetve 2-t ad eredményül. Tehát adjuk meg az x0, x1 és x2 definícióit úgy, hogy f x0 == 0, f x1 == 1 és f x2 == 2 teljesüljenek. A megoldásba másoljuk bele az f definícióját is.
f :: [[(a,[b])]] -> Int
f [(x,xs):[y,ys]] = 0
f ([_]:[(x,[xs])]:[y,ys]:[]) = 1
f ([(x,y:_:[])]:[]) = 2
Teszteléshez:
f x0 == 0
f x1 == 1
f x2 == 2
először is értelmezni kellene f típusát
bonyolultnak tűnik, de haladjunk bentről kifelé
(a,[b]): ez azt jelenti, hogy egy rendezett pár, aminek az első tagja bármi lehet, a második tagja meg egy lista (és ebben a listában szintén bármi lehet)
erre példa: (1,[2,3,4])
[(a,[b])]: ez azt jelenti, hogy az előbb definiált párokból álló lista (ezt hívjuk belső listának)
erre példa: [(1,[2]), (1,[3,4,5])]
[[(a,[b])]]: ez pedig azt, hogy az előbbi listákból álló lista (ezt pedig hívjuk külső listának)
erre példa: [[(1,[2])]]
nézzük az első esetet (f [(x,xs):[y,ys]]):
[y,ys]: a lista pontosan 2 elemet tartalmaz (és nem pedig legalább 1-et, ne zavarjon meg az y és ys elnevezés, ha így írnánk, hogy (y:ys), akkor jelentené azt, hogy legalább 1 elemű)
(x,xs):[y,ys]: a belső lista pontosan 3 elemet tartalmaz (az előbbi alapján egyértelmű, nem magyaráznám), és az első elemére vonatkozó (x,xs) minta semmi féle megkötést nem tartalmaz arra, hogy mit kéne tartalmaznia ennek a párnak (azon kívül, hogy a függvény típusa alapján tudjuk, hogy az xs egy listát kell jelentsen)
[(x,xs):[y,ys]]: ez pedig azt jelenti, hogy külső lista pontosan egy elemet tartalmaz, az előbb definiált 3 elemű belső listát
a másodikban annyit segítek még, hogy a [y,ys]:[] minta jelentése: [[y,ys]] (tehát egy üres listába betesszük a pontosan 2 elemű listát)
Értem, az elsőt sikerült megoldani.
A másodiknál eddig jutottam, de valami még mindig nem jó : x1= [[(1,"a")], [(2,"b")],[(3,"c")]]
az [y,ys] azt jelenti, hogy ez a belső lista 2 elemű
de ha megnézed, akkor f típusából látszik, hogy a belső listák párokat tartalmaznak
tehát akkor az y és az ys is egy-egy párt jelent
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!