Ocaml (inclusion de liste dans une liste)
Résolu
Kel
-
Kel -
Kel -
Bonjour,
J'ai essayé de faire une fonction qui test l'inclusion d'une liste dans une autre liste et j'y arrive pas . Si quelqu'un peu m'aider ça serait gentil .
Merci d'avance .
J'ai essayé de faire une fonction qui test l'inclusion d'une liste dans une autre liste et j'y arrive pas . Si quelqu'un peu m'aider ça serait gentil .
Merci d'avance .
A voir également:
- Ocaml list
- List disk - Guide
- Directory list & print - Télécharger - Divers Utilitaires
- Mailing list gmail - Guide
- Bash list ✓ - Forum Shell
- Emule kad server list ✓ - Forum Logiciels
5 réponses
C'est pas clair ta question...
Avec le typage fort d'OCaml il est immédiat de différencier une 'a list et une 'a list list
Avec le typage fort d'OCaml il est immédiat de différencier une 'a list et une 'a list list
merci d'avoir répondu ,
Voilà j'essai de résoudre un exercice qui demander d'érire une fonction inclus liste1 liste2 qui teste l'inclusion d'une liste dans une autre liste.
Par exemple : le liste [1;3;1] est inclus dans [1;3;3;1] et [3;1;1] et n'est pas inclus dans [1;3] ni dans [1;3;2]
#inclus [1;3;1] [1;3;3;1] = true
J'espère que c'est claire .
Voilà j'essai de résoudre un exercice qui demander d'érire une fonction inclus liste1 liste2 qui teste l'inclusion d'une liste dans une autre liste.
Par exemple : le liste [1;3;1] est inclus dans [1;3;3;1] et [3;1;1] et n'est pas inclus dans [1;3] ni dans [1;3;2]
#inclus [1;3;1] [1;3;3;1] = true
J'espère que c'est claire .
Non ce n'est pas encore tout à fait clair ^^
C'est une sous-liste que tu veux ? auquel cas [1;3;1] ne devrait pas être inclus dans [1;3;3;1]
Ou alors tu veux savoir si les éléments de l'ensemble sont le deuxième peu importe l'ordre des éléments, mais auquel cas c'est pas du tout la même chose (presque plus simple même ;)
C'est une sous-liste que tu veux ? auquel cas [1;3;1] ne devrait pas être inclus dans [1;3;3;1]
Ou alors tu veux savoir si les éléments de l'ensemble sont le deuxième peu importe l'ordre des éléments, mais auquel cas c'est pas du tout la même chose (presque plus simple même ;)
Tu dois faire un traitement récursif (normal : c'est du Caml !)
Pour éviter toute ambiguïté, je vais dire que c'est des ensembles même si c'est toujours des éléments de type list pour OCaml.
Remarque : le deuxième cas arrive lorsque l'ensemble2 est plus petit que l'ensemble1
Pour éviter toute ambiguïté, je vais dire que c'est des ensembles même si c'est toujours des éléments de type list pour OCaml.
Entrée : ensemble1 ensemble2 Question : ensemble1 inclus dans ensemble2 ? Cas terminaux : ensemble1 est vide --> Réponse = vrai ensemble2 est vide --> Réponse = faux
Remarque : le deuxième cas arrive lorsque l'ensemble2 est plus petit que l'ensemble1
Récursivité : on prend x1 le premier élément de ensemble1 on parcours l'ensemble2 pour trouver x2=x1 Si on a trouvé x2, on recommence avec ensemble1-x1 et ensemble2-x2 Sinon (on a tout parcouru) --> Réponse = faux
Merci beaucoup ça m'a aidé ^_^
ça marche voici le code :
let rec supp e l = match l with
[]->[]
|x::xs-> if e= x then xs else x ::(supp e xs );;
let trouver e l = match l with
[]-> false
|x::xs -> if e = x then true else trouver xs ;;
let rec inclus l1 l2 = match l1 with
[]-> true
|x::xs-> if List.mem x l2 then inclus ( supp x l1) (supp x l2 ) else false
;;
ça marche voici le code :
let rec supp e l = match l with
[]->[]
|x::xs-> if e= x then xs else x ::(supp e xs );;
let trouver e l = match l with
[]-> false
|x::xs -> if e = x then true else trouver xs ;;
let rec inclus l1 l2 = match l1 with
[]-> true
|x::xs-> if List.mem x l2 then inclus ( supp x l1) (supp x l2 ) else false
;;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tant mieux ^^
Juste deux petites erreurs pour trouver : tu as oublié rec, et le x dans trouver x xs;;
Pour info, voici ce que moi j'avais fait... Un peu plus compliqué, mais plus rapide surtout ;-)
Juste deux petites erreurs pour trouver : tu as oublié rec, et le x dans trouver x xs;;
Pour info, voici ce que moi j'avais fait... Un peu plus compliqué, mais plus rapide surtout ;-)
let rec contient x r = function |[] -> false,r |y::e -> if y=x then (true,r@e) else contient x (y::r) e;; let rec sousensemble = function |[],_ -> true |_,[] -> false |x::e1,e2 -> let (b,r) = contient x [] e2 in b && sousensemble (e1,r);;