CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[caml] Liste

EmeraldWeapon
EmeraldWeapon
Niveau 10
04 janvier 2006 à 22:15:40

bonjour,

:d) je dois ecrire une fonction "est_en_vente" de type int->bool qui à un article représenté par son code associe vrai ou faux selon que l´article est ou non dans la liste , dans une liste du type [(code,nom,prix) ; (code2,nom2,prix2) ; (... , ... , ...) ]

:d) ça donne

let liste_article = [(1,"crayon",5);(2,"stylo", 10)];;
val liste_article : (int * string * int) list = [1, "crayon", 5; 2, "stylo", 10]

let rec est_en_vente liste produit = match liste with
|[] -> false
|(m, m´,m´´)::x-> if m = produit then true else est_en_vente x produit;;
val est_en_vente : (´a * ´b * ´c) list -> ´a -> bool = <fun>

:d) je teste :

est_en_vente liste_article 1;;
- : bool = true
est_en_vente liste_article 5;;
- : bool = false

ca marche mais le probleme est le type de ma fonction qui n´est pas int-> bool mais (´a * ´b * ´c) list -> ´a -> bool = <fun> .. :(

comment avoir ce type ?

EmeraldWeapon
EmeraldWeapon
Niveau 10
04 janvier 2006 à 22:59:28

bon ben jai eu le temps de trouver la solution lol

let liste_article = [(1,"crayon",5);(2,"stylo", 10)];;
let est_en_vente produit =
let rec est_en_vente_aux = function
| [] -> false
| (m, m´,m´´)::x-> if m = produit then true else est_en_vente_aux x
in est_en_vente_aux liste_article ;;

par contre comment modifie-t-on que certains elements d´une liste et on renvoie la meme modifiée ?

EmeraldWeapon
EmeraldWeapon
Niveau 10
04 janvier 2006 à 23:10:10

par contre comment modifie-t-on en général que certains elements d´une liste et on renvoie la meme modifiée ?
je sais pas, par exemple ajouté 10 aux elements b d´une liste [(x,b);(y,b´);(z,b´´)]...
je pensais à

let modif x= function
| []->[]
|(m,m´) ->(m, m´+x);;

mais bon ...
merci d´avance pour votre aide.

dnob700
dnob700
Niveau 10
04 janvier 2006 à 23:24:54

pour ta première question j´aurais tendance à dire que ce n´est pas grave s´il te dit que le type est (´a * ´b * ´c) list -> ´a -> bool = <fun> au lieu de ce que tu attend. a veut juste dire que c´est plus générale.

Pour ta deuxième question, la seule "bonne" manière de faire (c´est à dire sans passer par une liste de mutable) c´est :

let rec modif x = function
[] -> []
|(a,b)::s -> (a,b+x)::(modif x s);;

Et tu ne peut pas savoir s´il modifie la liste qui existait déjà ou s´il en cré une nouvelle. Mais la force du Caml c´est de ne pas avoir à se soucier de ça : si ton programme est vraiment écrit en fonctionnel tu n´a pas besoin de modifier la liste que tu avait avant, le retour de la fonction te suffit. Bien sur, parfois il faut penser longtemps à comment écrire son programme pour qu´on puisse le faire dans ce sens. Mais même si c´est pas toujours le plus efficaces, c´est le plus esthétique le plus souvent.

EmeraldWeapon
EmeraldWeapon
Niveau 10
04 janvier 2006 à 23:38:31

merci :)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment