Tracks
/
Common Lisp
Common Lisp
/
Übungen
/
Logans numerische Partition
Logans numerische Partition

Logans numerische Partition

Lernübung

Einführung

Reduzieren

Beim Reduzieren wendest du wiederholt eine Funktion auf jedes Element einer Sequenz an und sammelst die Ergebnisse auf irgendeine Weise. Die angewendete Funktion nimmt zwei Parameter: den aktuellen gesammelten Wert und das zu verarbeitende Element. Sie muss den neuen gesammelten Wert ergeben.

In Common Lisp erledigst du das mit der Funktion reduce. In ihrer einfachsten Form sieht sie so aus:

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

Beachte, dass ein Anfangswert angegeben wird. Dieser ist der „aktuelle gesammelte Wert“, der an die Funktion übergeben wird, wenn das erste Element verarbeitet wird.

Hier ist ein Beispiel, das die Zahlen der Liste addiert und dabei mit einem Anfangswert von 10 beginnt:

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

Beachte: Wenn die Sequenz leer ist, wird die Funktion nie aufgerufen und der Ausdruck ergibt den Anfangswert.

Anleitung

Logan, das Lisp-Alien, mag Zahlen und mag es außerdem, Dinge zu ordnen.

Logan bittet dich, ihm zu helfen: Du sollst eine Funktion schreiben, die eine Liste von Zahlen entgegennimmt und daraus ein Paar aus zwei Listen macht. Die erste enthält alle ungeraden Zahlen, die zweite alle geraden.

1. Eine Zahl kategorisieren

Zuerst brauchst du eine Funktion, die ein Paar aus zwei Listen und eine Zahl entgegennimmt und die Zahl in die richtige Teilliste einsortiert, je nachdem, ob sie ungerade oder gerade ist:

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

2. Viele Zahlen kategorisieren

Jetzt kannst du mit der Funktion, die du gerade geschrieben hast, eine weitere Funktion schreiben, die eine Liste von Zahlen entgegennimmt und sie so kategorisiert wie oben:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Common Lisp Exercism

Bereit, mit Logans numerische Partition zu starten?

Melde dich bei Exercism an, um Common Lisp mit 27 Konzepte92 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.