Órai jegyzetek

Logo‎ > ‎Elmélet‎ > ‎

Listák

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:

 KIÍR FAKT 10 

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

A LOGO nyelv karakterláncai hasonlítanak a listákra, több listakezelő eljárás karakterláncokat is fogadhat paraméterként. A működés analóg, de nem mindig azonos. A karakterlánc konstansokat egy idézőjel vezeti be:

> kiír első "almafa
a
> kiír utolsónak "a "almaf
almafa
> kiír mondat [3 4] [1 2]
3 4 1 2
> kiír mondat "alma "fa
alma fa
> kiír szó "alma "fa
almafa

Speciálisan a számok (számjegyek sorozata) is karakterláncok, a számjegy karakterekből állnak.

> kiír első 2011
2

Tovább bonyolítja a helyzetet, hogy ha egy lista elemei karakterláncok, akkor nem szabad kiírni az idézőjelet a karakterlánc konstansok megadásánál.

> kiír első [alma körte szilva]
alma
> kiír első ["alma "körte "szilva]
"alma