Kurzusok
/
Common Lisp
Common Lisp
/
Feladatok
/
Legjobb pontszámok
Legjobb pontszámok

Legjobb pontszámok

Tanulófeladat

Bevezetés

Hashtáblák

A hashtáblák a Common Lispben asszociatív adatok tárolására szolgáló adatszerkezetek. A kulcsokat (amelyek bármilyen objektumok lehetnek) értékekhez rendelik (amelyek szintén bármilyen objektumok lehetnek). Más nyelvekben ezt a fogalmat map, szótár vagy hash néven ismerheted.

Hashtáblák létrehozása

Hashtáblát a make-hash-table függvénnyel hozhatsz létre.

(make-hash-table) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {10024AD2B3}>

(Figyeld meg, hogy a hashtábla kiírt formája implementációfüggő, ezért a te REPL-edben máshogy nézhet ki.)

Értékek kiolvasása kulcsok alapján

Ha egy kulcshoz tartozó értéket szeretnél kiolvasni a hashtáblából, a gethash függvényt használod:

*h* ; => #<HASH-TABLE :TEST EQL :COUNT 3 {10024AD2B3}>`
(gethash :foo *h*) ; => :bar
                   ;    T

A gethash több értéket ad vissza, amit egy másik fogalomban magyarázunk el.

Értékek beszúrása

Ha értéket szeretnél beszúrni egy hashtáblába, a setf-et a gethash-sal együtt használod, így:

(setf (gethash :foo *hash-table*) :bar) : => :bar

Ez a *hash-table* hashtáblában a :foo kulcshoz tartozó értéket :bar-ra módosítja. Az értéket adja vissza.

A setf használatát egy másik fogalomban magyarázunk el.

Utasítások

Lamont egy Lisp-űrlény, aki a saját videojátékát szeretné megírni. Az egyik feladat, amelyben a segítségedet kéri, a csúcspontszám-lista vezetése.

1. A csúcspontszám-táblázat létrehozása

Definiálj egy make-high-score-table nevű függvényt, amely nem fogad argumentumot, és egy új, üres hash-táblázatra értékelődik ki:

(make-high-score-table) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {1005A90103}>

2. Játékos hozzáadása a táblázathoz

Ha játékost szeretnél hozzáadni a táblázathoz, definiálj egy add-player nevű függvényt, amely két argumentumot vár:

  • a csúcspontszám-táblázatot
  • a játékos nevét keywordként

Állítsd a játékos kezdő pontszámát nullára.

(add-player hash-table :louis) ; => 0
(add-player hash-table :lilly) ; => 0

3. Játékos pontszámának beállítása

Ha be szeretnéd állítani egy játékos pontszámát, definiálj egy set-score nevű függvényt, amely három argumentumot vár:

  • a csúcspontszám-táblázatot
  • a játékos nevét keywordként
  • a játékos pontszámát egész számként
(set-score hash-table :louis 1234) ; => 1234

4. Pontszám lekérdezése a táblázatból

Ha le szeretnéd kérdezni egy játékos pontszámát a táblázatból, definiálj egy get-score nevű függvényt, amely két argumentumot vár:

  • a csúcspontszám-táblázatot
  • a játékos nevét keywordként

Ez a függvény a játékoshoz tárolt pontszámra értékelődjön ki. Ha ehhez a játékoshoz nincs tárolt pontszám, vagy a játékos még nincs benne a táblázatban, akkor az érték 0 legyen.

(get-score hash-table :louis)                         ; => 1234
(get-score hash-table :lilly)                         ; => 0
(get-score hash-table :not-a-character-in-this-story) ; => 0

5. Játékos eltávolítása a táblázatból

Ha el szeretnél távolítani egy játékost a csúcspontszám-táblázatból, definiálj egy remove-player nevű függvényt, amely két argumentumot vár:

  • a csúcspontszám-táblázatot
  • a játékos nevét keywordként

Ennek a függvénynek gördülékenyen kell kezelnie azt az esetet, amikor a játékost még nem adták hozzá a táblázathoz. Nyilvánvaló, hogy miután egy játékost eltávolítottunk, ha lekérdezzük a pontszámát a táblázatból, az nulla lesz.

(set-score hash-table :louis 1234)           ; => 1234
(remove-player hash-table :louis)            ; => T
(get-score hash-table :louis)                ; => 0

(remove-player hash-table :not-in-the-table) ; => NIL
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Common Lisp Exercism

Készen állsz elkezdeni a(z) Legjobb pontszámok feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Common Lisp nyelvet 27 fogalom92 feladat segítségével, valódi emberi mentorálással, mindez ingyen.