Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Caml
Caml Forum d'entraide sur la programmation avec les langages fonctionnels Caml-Light et OCaml
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 21h40   #1
nemoO
Invité de passage
 
Femme
Étudiant
Inscription : décembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 1
Points : 0
Points : 0
Par défaut list et fonction auxiliaire

Bonjour , jai un petit probleme
jarriver pas à implementer cette fonction

let addpositive i=
let lo=[2;3;4;5;-1];
let rec list acc = function
|[]->acc
|a::b -> if (a<0) then list acc b else list (a+acc) b
in list 0 lo;;

ou la fonction addpositive fait l' addition juste des membre positive de lo que jai definit à l'intérieure de la fonction
mercii d'avance
nemoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 23h20   #2
prgasp77
Membre Expert
 
Avatar de prgasp77
 
Homme Yankel Scialom
Ingénieur en systèmes embarqués
Inscription : juin 2004
Messages : 1 031
Détails du profil
Informations personnelles :
Nom : Homme Yankel Scialom
Âge : 26
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur en systèmes embarqués
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2004
Messages : 1 031
Points : 1 493
Points : 1 493
Citation:
Envoyé par nemoO Voir le message
ou la fonction addpositive fait l' addition juste des membre positive de lo que jai definit à l'intérieure de la fonction
La fonction fait la somme des entiers positifs présents dans la liste lo ? Sans considération de son paramètre ? C'est donc une fonction constante, tu confirmes ? La fonction list que tu as créée est correcte (à part son nom un peu maladroit à mon goût).
__________________
gasp in touch
-- Yankel Scialom
prgasp77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 10h46   #3
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 858
Points : 858
Envoyer un message via MSN à Kirilenko
Bonjour,

Effectivement, j'ai une erreur de compilation chez moi, dû au fait que tu ne confères pas la bonne portée à lo : puisqu'il s'agit d'une variable locale, tu devrais utiliser in lors de sa définition. D'autre part, il serait plus logique d'agir sur un argument, dans le sens où tu pourras de toute manière faire ton test dessus.

Code :
1
2
3
4
5
6
7
8
let addpositive l =
  let rec aux n l =
    match l with
      [] -> n
    | head :: tail -> if head > 0 then aux (n + head) tail
                      else aux n tail in
  aux 0 l
  ;;
Bonne journée.
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 16h03   #4
SpiceGuid
Rédacteur
 
Avatar de SpiceGuid
 
Homme Damien Guichard
Inscription : juin 2007
Messages : 1 518
Détails du profil
Informations personnelles :
Nom : Homme Damien Guichard
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 1 518
Points : 2 500
Points : 2 500
Par défaut let rec puis let

Une pratique courante en Caml consiste à d'abord définir une fonction avec accumulateur (let rec) puis à la redéfinir (let) sans accumulateur.

Code OCaml :
1
2
3
4
5
6
let rec sum_positives acc = function
   | [] -> acc
   | h :: t -> sum_positives (if h > 0 then acc + h else acc) t

let sum_positives = sum_positives 0;;
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo.
Avant de poser une question je lis les règles du forum.
SpiceGuid est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h27.


 
 
 
 
Partenaires

Hébergement Web