Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    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

  2. #2
    Membre Expert Avatar de prgasp77
    Homme Profil pro Yankel Scialom
    Ingénieur en systèmes embarqués
    Inscrit en
    juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Nom : Homme Yankel Scialom
    Âge : 27
    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 084
    Points : 1 390
    Points
    1 390

    Par défaut

    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).

  3. #3
    Membre chevronné
    Avatar de Kirilenko
    Homme Profil pro Lucas Pesenti
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Nom : Homme Lucas Pesenti
    Âge : 17
    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 : 762
    Points
    762

    Par défaut

    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

  4. #4
    Rédacteur
    Avatar de SpiceGuid
    Homme Profil pro Damien Guichard
    Inscrit en
    juin 2007
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Nom : Homme Damien Guichard
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 574
    Points : 2 449
    Points
    2 449

    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 blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •