Listák és funkcionális programozás
Funkcionális programozás
Most olyan programokat vizsgálunk, amelyek nem mozgatják a teknőcöt. Az ilyen programokat alkotó eljárások általában valamilyen EREDMÉNY-t adnak vissza, amit aztán KIÍRhatunk a képernyőre, vagy tovább számolhatunk vele.
Részletesebb magyarázat helyett egyszerű példákat mutatunk:
Faktoriális
ELJÁRÁS fakt :n
HAK :n = 1
[EREDMÉNY 1]
[EREDMÉNY :n*fakt :n-1]
VÉGE
A használat:
Hatvány
ELJÁRÁS hatvány :alap :kitevő
HAK :kitevő = 0
[EREDMÉNY 1]
[EREDMÉNY :alap*hatvány :alap :kitevő-1]
VÉGE
Számok összege
ELJÁRÁS összeg :n
HAK :n = 1
[EREDMÉNY 1]
[EREDMÉNY :n+összeg :n-1]
VÉGE
Hatványösszeg
ELJÁRÁS hösszeg :n :k
HAK :n = 1
[EREDMÉNY 1]
[EREDMÉNY (hatvány :n :k)+(hösszeg :n-1 :k)]
VÉGE
Fibonacci
ELJÁRÁS fib :n
HAK :n = 1
[EREDMÉNY 1]
[HAK :n=2
[EREDMÉNY 1]
[EREDMÉNY (fib :n-1)+(fib :n-2)]
]
VÉGE
Binomiális együtthatók
ELJÁRÁS nalattaká :n :k
HA :k = 0 [EREDMÉNY 1]
HA :n = :k [EREDMÉNY 1]
EREDMÉNY (nalattaká :n-1 :k-1)+(nalattaká :n-1 :k)
VÉGE
A lista adatszerkezet
A lista számok vagy más objektumok rendezett sorozata. Akár újabb listák is lehetnek az elemek, és nem kell minden listaelemnek azonos típusúnak lennie.
Számok listája
[1 4 2 3 42 5 7 9 8 1 1 0 1]
Listák listája
[[1 4 2 3] [42] [5 7 9 8] [] [1 1 0 1]]
Mint a második példából látható, egy lista lehet üres is. Az üres lista jelölése: [].
Listák megjelenítése
A megjelenítő parancsok (KIÍR és MUTAT) különböznek abban, hogy írnak ki egy listát.
A
KIÍR [1 2 3] eredménye:
1 2 3
A
MUTAT [1 2 3] eredménye:
[1 2 3]
Műveletek listákkal
parancs | leírás | példa |
ELEMSZÁM |
Megadja egy lista elemeinek számát. Az összetett objektumok (például listák) egy elemnek számítanak. |
elemszám [1 2 3 5]
> 4
elemszám [[2 3] [5]]
> 2
|
ELEME? |
Eldönti, az első paraméter benne van-e a második paraméterben megadott listában. |
eleme? 3 [1 2 3 5]
> igaz |
ELEME |
Megadja, hogy az első paraméter hányadik helyen szerepel (először) a listában.
Ha nem szerepel, 0-t ad vissza. |
eleme 5 [1 2 3 5 6 7]
> 4 |
ELSŐ |
Egy nemüres lista első elemét adja meg. |
első [3 4 6]
> 3 |
UTOLSÓ |
Egy nemüres lista utolsó elemét adja meg. |
utolsó [3 4 6]
> 6 |
ELEM |
Az adott indexű elemet adja vissza. |
elem 3 [10 100 1000 10000]
> 1000 |
ELSŐNÉLKÜLI |
Az első elem eltávolításával kapott listát adja vissza. |
elsőnélküli [10 9 8 7 6]
> [9 8 7 6] |
UTOLSÓNÉLKÜLI |
Az utolsó elem eltávolításával kapott listát adja vissza. |
utolsónélküli [1 2 3 4 5]
> [1 2 3 4] |
ELSŐNEK |
Az új elemmel az első helyen bővített listát adja meg. |
elsőnek 2008 [12 8]
> [2008 12 8] |
UTOLSÓNAK |
Az új elemmel az utolsó helyen bővített listát adja meg. |
utolsónak 11 [2 3 5 7]
> [2 3 5 7 11] |
MONDAT |
Két lista összefűzése. |
mondat [1 3 5] [2 4 6]
> [1 3 5 2 4 6] |
EGYENLŐ? |
Eldönti, hogy a két lista azonos-e. |
egyenlő? [1 3 9] [1 [3] 9]
> hamis |
Példák listakezelésre
Lista legkisebb eleme
eljárás legkisebb :lista
HAK (ELEMSZÁM :lista)=1
[
EREDMÉNY ELSŐ :lista
]
[
HAK (ELSŐ :lista) > (UTOLSÓ :lista)
[
EREDMÉNY legkisebb ELSŐNÉLKÜLI :lista
]
[
EREDMÉNY legkisebb UTOLSÓNÉLKÜLI :lista
]
]
vége
Lista elemeinek összege
eljárás összegzés :lista
HAK ÜRES? :lista //vagy: (ELEMSZÁM :lista)=0
[
EREDMÉNY 0
]
[
EREDMÉNY (ELSŐ :lista) +(összegzés ELSŐNÉLKÜLI :lista)
]
vége
Listák és karakterláncok