-
Une personne est un tuple
{sexe, Nom, Age}
, ousexe
peut prendre les valeurshomme
oufemme
. Ecrire un accesseur pour le nom de la personne. -
Créer une liste de personnes.
-
Extraire la liste des noms des personnes contenues dans la liste
- sans utilier
lists:map
- puis en utilisant
lists:map
.
- sans utilier
-
Ecrire les accesseurs pour les autres champs.
-
Extraire la liste des hommes
- sans utiliser
lists:filter
- puis en utilisant
lists:filter
.
- sans utiliser
-
Ecrire une fonction calculant la somme des elements d'une liste
- sans utiliser les fonctions
list:foldr
oulist:foldl
- en utilisant
lists:foldr
- Remarquer que
lists:sum
existe
- sans utiliser les fonctions
-
Ecrire une fonction calculant l'age moyen des personnes d'une liste.
-
Ecrire une fonction pour calculer l'age moyen des hommes et des femmes d'une liste: le résultat a la forme
[{homme, 30}, {femme, 10}]
. Astuce : explorer les fonctionslists:partition
,lists:zip
, etc.
Last active
August 29, 2015 14:01
-
-
Save jbpotonnier/85f0a6b3dea2c3017405 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-module(collections). | |
-export([test_1/0, test_2/0, test_3/0, test_4/0, test_5/0, test_6/0, | |
test_7/0, test_8/0, test_9/0]). | |
nom({_, Nom, _}) -> Nom. | |
sexe({Sexe, _, _}) -> Sexe. | |
age({_, _, Age}) -> Age. | |
noms([]) -> []; | |
noms([X|XS]) -> [nom(X)|noms(XS)]. | |
hommes([]) -> []; | |
hommes([X|XS]) -> | |
case sexe(X) of | |
homme -> [X|hommes(XS)]; | |
femme -> XS | |
end. | |
somme([]) -> 0; | |
somme([X|XS]) -> X + somme(XS). | |
age_moyen(Personnes) -> | |
lists:sum(lists:map(fun (X) -> age(X) end, Personnes)) / length(Personnes). | |
test_1 () -> | |
P = {homme, "Jean-Baptiste", 35}, | |
"Jean-Baptiste" = nom(P). | |
test_2 () -> | |
Personnes = [ | |
{homme, "Pierre", 35}, | |
{homme, "Paul", 35} | |
], | |
["Pierre", "Paul"] = noms(Personnes). | |
test_3 () -> | |
Personnes = [ | |
{homme, "Pierre", 35}, | |
{homme, "Paul", 35} | |
], | |
["Pierre", "Paul"] = lists:map(fun nom/1, Personnes). | |
test_4 () -> | |
Personnes = [ | |
{homme, "Pierre", 35}, | |
{femme, "Julie", 25}, | |
{homme, "Paul", 35} | |
], | |
[{homme, "Pierre", 35}, {homme, "Paul", 35}] = hommes(Personnes). | |
test_5 () -> | |
Personnes = [ | |
{homme, "Pierre", 35}, | |
{femme, "Julie", 25}, | |
{homme, "Paul", 35} | |
], | |
[{homme, "Pierre", 35}, {homme, "Paul", 35}] = | |
lists:filter(fun (X) -> sexe(X) == homme end, Personnes). | |
test_6 () -> | |
9 = somme([1, 3, 5]). | |
test_7() -> | |
9 = lists:foldr(fun (A, B) -> A + B end, 0, [1, 3, 5]). | |
test_8 () -> | |
Personnes = [ | |
{homme, "Pierre", 30}, | |
{femme, "Julie", 25}, | |
{homme, "Paul", 20} | |
], | |
25.0 = age_moyen(Personnes). | |
test_9 () -> | |
Personnes = [ | |
{homme, "Pierre", 30}, | |
{femme, "Julie", 25}, | |
{femme, "Marie", 75}, | |
{homme, "Paul", 20} | |
], | |
{Hommes, Femmes} = lists:partition(fun(P) -> sexe(P) == homme end, Personnes), | |
[{homme, 25.0}, {femme, 50.0}] = lists:zip([homme, femme], | |
lists:map(fun age_moyen/1, [Hommes, Femmes])). | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment