IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Contribution : Fonctions utilitaires sur les listes


Sujet :

Caml

  1. #21
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Citation Envoyé par SpiceGuid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (*
     * License: Creative Commons http://creativecommons.org/licenses/by/3.0/
     *)
     
    module Seq = struct
    Tu mets une licence sur ce genre de code ?

  2. #22
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Mon argument est bassement pragmatique, avec la même signature c'est plus "facile à manier", je ne veux pas savoir si c'est implémenté avec un accumulateur ou pas, je ne veux pas savoir si l'un est le dual de l'autre, ce que je veux c'est pouvoir substituer l'un à l'autre sans me poser de question, je ne travaille pas dans un cirque, si je peux m'épargner du "jonglage" de paramètres je ne vais pas m'en priver.

    Oui, je mets du code sous ce genre de licence.

  3. #23
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut

    Tiré du paper "Finger trees: a simple general-purpose data structure"

    Citation Envoyé par SpiceGuid
    ce que je veux c'est pouvoir substituer l'un à l'autre sans me poser de question
    Excuse moi, mais j'ai du mal à croire que tu substitues fold_left à fold_right sans te poser de question ! Ce sont quand même des opérateurs très différents, qu'on n'utilise pas vraiment dans le même cas. À part dans le cas des opérateurs associatifs (avec lesquels ça ne fait pas de différence, donc tu utilises fold_left en OCaml parce que tail-rec, et je ne sais pas lequel en Haskell, sans doute foldr), il me paraît très douteux de remplacer l'un par l'autre, et en tout cas je suis certain que si tu as besoin de faire ça, tu dois te poser des questions...

    Citation Envoyé par SpiceGuid
    Oui, je mets du code sous ce genre de licence.
    Il me semble que les licences Creative Commons ne sont pas (juridiquement) très adaptées pour du code source. Étant donné que tu ne précises même pas quelle licence tu veux (à part dans l'URL), je doute que ce soit très valable. Pourquoi ne pas utiliser une licence équivalente et plus adaptée au code, comme la BSD, ou (encore plus simple) MIT ?

  4. #24
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    b->a->b dit que l'opérateur est associatif à gauche.
    a->b->b dit que l'opérateur est associatif à droite.

    L'ennui c'est que parfois la même donnée/liste est disponible dans les deux orientations: c'est le cas de la queue de Chris Okasaki.
    Plus souvent: on ne sait pas dans quel sens on va orienter la liste (mais on veut déjà commencer à coder).

  5. #25
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Comme je n'ai pas trouvé l'équivalent dans la librairie standard, j'ai ajouté Seq.of_string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # let of_string s =
      let rec loop n acc =
        if n < 0 then acc
        else loop (pred n) (s.[n]::acc)
      in loop (String.length s - 1) [];;
    val of_string : string -> char list = <fun>

  6. #26
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    un peu plus lente mais plus amusante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let of_string s = Array.to_list (Array.init (String.length s) (String.get s))

Discussions similaires

  1. fonctions sur les Listes chainées
    Par rototo1 dans le forum C
    Réponses: 7
    Dernier message: 31/01/2013, 19h47
  2. Réponses: 2
    Dernier message: 22/06/2007, 18h25
  3. Recherche fonction sur les listes
    Par becks dans le forum Général Python
    Réponses: 5
    Dernier message: 05/05/2006, 17h11
  4. Fonction MAX sur les lignes
    Par yostane dans le forum Langage SQL
    Réponses: 7
    Dernier message: 01/04/2006, 22h49
  5. Précisions sur les listes
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2006, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo