Tu mets une licence sur ce genre de code ?Envoyé par SpiceGuid
Tu mets une licence sur ce genre de code ?Envoyé par SpiceGuid
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.
Tiré du paper "Finger trees: a simple general-purpose data structure"
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...Envoyé par SpiceGuid
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 ?Envoyé par SpiceGuid
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).
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>
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))
Partager