Parcours
/
Common Lisp
Common Lisp
/
Exercices
/
La partition numérique de Logan
La partition numérique de Logan

La partition numérique de Logan

Exercice d'apprentissage

Introduction

Réduction

La réduction consiste à appliquer de façon répétée une fonction à chaque élément d'une séquence, en accumulant d'une manière ou d'une autre les résultats. La fonction appliquée prend deux paramètres : la valeur accumulée courante et l'élément à traiter. Elle doit s'évaluer en la nouvelle valeur accumulée.

En Common Lisp, on effectue ce processus avec la fonction reduce. Dans sa forme la plus simple, cela ressemble à :

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

Remarque qu'une valeur initiale est fournie : c'est elle qui jouera le rôle de « valeur accumulée courante » transmise à la fonction lors du traitement du premier élément.

Voici un exemple qui additionne les nombres de la liste en partant d'une valeur initiale de 10 :

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

Note que si la séquence est vide, la fonction n'est jamais appelée et la forme s'évalue en la valeur initiale.

Instructions

Logan, l'extraterrestre Lisp, aime les nombres et aime aussi organiser les choses.

Il te demande de l'aider à écrire une fonction qui prend une liste de nombres et produit une paire de deux listes : la première contient tous les nombres impairs, la seconde tous les nombres pairs.

1. Catégorise un nombre

Pour commencer, il te faut créer une fonction qui prend une paire de deux listes et un nombre, et qui range ce nombre dans la bonne sous-liste selon qu'il est impair ou pair :

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

2. Catégorise plein de nombres

Maintenant, avec la fonction que tu viens de créer, tu peux en écrire une autre qui prend une liste de nombres et les catégorise comme tu l'as fait ci-dessus :

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Common Lisp Exercism

Prêt à commencer La partition numérique de Logan ?

Inscris-toi sur Exercism pour apprendre et maîtriser Common Lisp avec 27 concepts92 exercices, et un vrai mentorat humain, le tout gratuitement.