Kurzusok
/
Common Lisp
Common Lisp
/
Feladatok
/
Logan numerikus felosztása
Logan numerikus felosztása

Logan numerikus felosztása

Tanulófeladat

Bevezetés

Redukálás

A redukálás során egy függvényt alkalmazunk ismételten egy sorozat minden elemére, az eredményeket pedig valamilyen módon akkumuláljuk. Az alkalmazott függvény két paramétert kap: az aktuális akkumulált értéket és a feldolgozandó elemet. Az eredményének az új akkumulált értéknek kell lennie.

Common Lispben ezt a folyamatot a reduce függvény végzi. A legegyszerűbb formájában így néz ki:

(reduce #'function-to-apply sequence :initial-value value)

Figyeld meg, hogy meg van adva egy kezdőérték: ez lesz az „aktuális akkumulált érték”, amelyet a függvény megkap, amikor az első elemet feldolgozza.

Íme egy példa, amely összeadja a lista számait, 10-es kezdőértékről indulva:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

Vedd figyelembe, hogy ha a sorozat üres, a függvény soha nem hívódik meg, és a forma értéke az initial-value lesz.

Utasítások

Logan, a Lisp-űrlény szereti a számokat, és a rendszerezést is kedveli.

Arra kér, hogy segíts neki megírni egy függvényt, amely átvesz egy számokból álló listát, és előállít két lista párját: az elsőben a páratlan számok, a másodikban a páros számok vannak.

1. Egy szám kategorizálása

Először létre kell hoznod egy függvényt, amely átvesz két lista egy párját és egy számot, majd a számot a megfelelő allistába teszi aszerint, hogy páratlan vagy páros:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. Sok szám kategorizálása

Most az imént létrehozott függvénnyel írhatsz egy másik függvényt is, amely átvesz egy számokból álló listát, és ugyanúgy kategorizálja őket, ahogy fent tetted:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Common Lisp Exercism

Készen állsz elkezdeni a(z) Logan numerikus felosztása 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.