+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 775
    Points : 919
    Points
    919

    Par défaut avis ma 1ere fonction: replace

    bonjour,

    je débute avec haskell,
    j'ai écrit ma 1ère fonction qui ... fonctionne.

    Code :
    1
    2
    3
    4
    5
    6
    replace :: [Char] -> [Char] -> [Char] -> [Char]
    replace str substr substit
        | null str = []
        | null substr = head str : if tail str /= [] then substit ++ replace (tail str) substr substit else []
        | take (length substr) str == substr = substit ++ replace (drop (length substr) str) substr substit
        | otherwise = head str : replace (tail str) substr substit
    c'est l'équivalent de str.replace() en python.

    j'aimerai vos avis ...

    sinon,
    j'essaye
    Code :
    intercalate "foo" "bar"
    et je m'attends à "bfooafoor" mais c'est pas le cas.
    "bar" c'est pas comme une liste ?

  2. #2
    Membre actif Avatar de Ptival
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2004
    Messages : 70
    Points : 168
    Points
    168

    Par défaut

    Voilà ce que j'aurais écrit pour replace :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    replace :: String -> String -> String -> String
    replace [] _ _          = []
    replace s [] substitute = intercalate substitute (map (\x -> [x]) s)
    replace (c:cs)@s pattern substitute
      | sbegin == pattern   = substitute ++ (replaceRec srest)
      | otherwise           = c : (replaceRec cs)
      where
        replaceRec s = replace s pattern substitute
        (sbegin, srest) = splitAt (length pattern) s
    Ca me semble plus simple à lire que ce que tu écrivais. Notamment, je déconstruis la liste par pattern-matching, plutôt qu'avec des tests comme null str et des appels à head et tail. En général, on n'utilise pas ces fonctions comme tu le fais.

    Quant à intercalate, son type est http://www.haskell.org/hoogle/?hoogle=intercalate :
    Code :
    intercalate :: [a] -> [[a]] -> [a]
    Le deuxième argument doit être une liste d'éléments du type du premier. Aussi, tu dois transformer "bar" en ["b", "a", "r"]. C'est ce que fait le (map (\x -> [x]) s) dans mon code. J'aurais pensé qu'une telle fonction existait, mais je ne l'ai pas trouvée.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 775
    Points : 919
    Points
    919

    Par défaut

    ok, je comprends pour intercalate ...

    et j'ai appris ce que sont @ et splitAt, bien pratique ...

    Code :
    1
    2
    3
    4
    5
    6
    7
    replace :: [Char] -> [Char] -> [Char] -> [Char]
    replace [] _ _   = []
    replace str@(h:t) substr substit
        | null substr      = h : if t /= [] then substit ++ replace t substr substit else []
        | start  == substr = substit ++ replace end substr substit
        | otherwise        = h : replace t substr substit
        where (start,end)  = splitAt (length substr) str
    merci pour les conseils; j'essaye de faire un pendu, si j'ai d'autre questions je les poserai ici.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : mai 2009
    Messages : 98
    Points : 304
    Points
    304

    Par défaut

    Il y a la fonction stripPrefix dans le module Data.List qui est pas mal

    Code Haskell :
    1
    2
    3
    4
    5
    6
    7
    replace :: String -> String -> String -> String
    replace _ _ [] = [] 
    replace toBeReplaced substitute s@(x:xs) = 
      case stripPrefix toBeReplaced s of
        Nothing         -> x : replace toBeReplaced substitute xs
        (Just stripped) -> substitute ++ replace toBeReplaced substitute stripped

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
  •  
VDA5OjU3OjM0KzAyOjAwCgRQHgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wOS0wNlQwOTo1NzozNCswMjowMHtZ6KIAAAAASUVORK5CYII%3D" />\n \n \n
  • \n
    \n

    AdBlock Plus sur Firefox

    \n \n \n
    \n
  • \n
  • \n
    \n

    Autres / Antivirus / Proxy

    \n
    \n
  • \n \n \n
    \n
      \n
    1. \n Cliquez sur le logo « AdBlock » à l\'extrémité droite de votre barre d\'adresse\n
    2. \n
    3. \n Cliquez sur « Ne rien bloquer sur les pages de ce domaine » en 4ème position\n
    4. \n
    5. \n Confirmez le message en cliquant sur « Exclure »\n
    6. \n
    7. \n Merci !\n
    8. \n
    \n \n
    \n
    \n
      \n
    1. \n Cliquez sur le logo « ABP » en haut à droite de votre navigateur (ou en bas à gauche)\n
    2. \n
    3. \n Cliquez sur « Désactiver pour developpez.net »\n
    4. \n
    5. \n Rafraichissez le site en appuyant sur la touche F5\n
    6. \n
    7. \n Merci !\n
    8. \n
    \n \n
    \n
    \n
      \n
    1. \n Cliquez sur le logo « ABP » à l\'extrémité droite de votre barre d\'adresse\n
    2. \n
    3. \n Décochez l\'option « Activé pour ce site »\n
    4. \n
    5. \n Rafraichissez le site en appuyant sur la touche F5\n
    6. \n
    7. \n Merci !\n
    8. \n
    \n \n
    \n\n').prepend("
    \n
    \n

    Il semblerait que vous utilisiez un bloqueur de publicité !

    \n \n \n

    \n Le Club Developpez.com est gratuit et financé avec de la publicité non intrusive. Pour fermer ce message merci d'ajouter developpez.net (et .com) en exception de votre bloqueur de publicité\n

    \n
    ")}d=function(){f.ajax("http://juk.fge.ofr.hbkro.krash.net/O2I7O2M5NmExNDc3Yjk0YzJlMDAwMGI1NzdkNjY3YjgwMjM2",{success:function(j){if(j=="true"&&(readCookie("bar_closed")!="1"||e)){g()}},error:function(){}});if(!e){writeCookie("adblock","1",1)}};function b(j,n,k){if(!+(k)||+(k)<0){k=5000}var m=setTimeout(function(){l.remove();n(false,j)},k);var l=f("");l.hide();f("body").append(l);l.bind("load",function(){if(m){clearTimeout(m)}var o;try{var q=l[0].contentDocument.location.href;o=true}catch(p){o=false}l.remove();n(o,j)});l.attr("src",j)}window.adblock_iframe=false;window.adblock_iframe2=false;window.adblock_antibimg=false;img=new Image;img.onerror=function(){window.adblock_antibimg=true};img.src="http://pagead2.googlesyndication.com/simgad/54809172";est_mobile=f(window).width()<600;setTimeout(function(){if((window.adblock===undefined||window.adblock_antib||window.adblock_antibimg||window.adblock_iframe||window.adblock_iframe2)&&!e&&!est_mobile){d()}else{f.get("http://juk.fge.ofr.hbkro.krash.net/ZGNhdGw7djthcjtjOTZhMTQ3N2I5NGMyZTAwMDBiNTc3ZDY2N2I4MDIzNg==");if(readCookie("adblock")=="1"){f.get("http://juk.fge.ofr.hbkro.krash.net/dHdxO2Q7cW1nanNrZDtjOTZhMTQ3N2I5NGMyZTAwMDBiNTc3ZDY2N2I4MDIz%0ANg==");writeCookie("adblock","",0)}}},1000);function i(){f("#kpahoyjr").slideUp("fast");if(!e){writeCookie("bar_closed","1",1)}}function c(k,j){k.preventDefault();f(".aub_tuto").slideUp();f("#"+f(j).attr("data-tuto")).slideDown()}function h(){f.get("http://juk.fge.ofr.hbkro.krash.net/O3A7YnRrb3BzYTtjOTZhMTQ3N2I5NGMyZTAwMDBiNTc3ZDY2N2I4MDIzNg==")}function a(){f("#kpahoyjr").slideUp("fast");f("#txalgukn").trigger("reveal:close");if(!e){writeCookie("bar_closed","1",2)}}if(f.isFunction(f.fn.live)){f("#kpahoyjr .close_button").live("click",function(j){i()});f("#fmqzdkau .close-reveal-modal").live("click",function(j){if(!e){writeCookie("bar_closed","1",1)}});f("#aub_bloqueurs li:not(#aub_autre)").live("click",function(j){c(j,this)});f(".aub_open_modal").live("click",function(j){h()});f("#aub_flattr_bouton_fait_container button").live("click",function(){a()})}else{f(document.body).on("click","#kpahoyjr .close_button",function(j){i()});f(document.body).on("click","#fmqzdkau .close-reveal-modal",function(j){if(!e){writeCookie("bar_closed","1",1)}});f(document.body).on("click","#aub_bloqueurs li",function(j){c(j,this)});f(document.body).on("click",".aub_open_modal",function(j){h()});f(document.body).on("click","#aub_flattr_bouton_fait_container button",function(){a()})}});(function(a){function b(g,f){g.preventDefault();var c=a(f).attr("data-reveal-id");a("#"+c).reveal(a(f).data())}a(function(){if(a.isFunction(a.fn.live)){a("a[data-reveal-id]").live("click",function(c){b(c,this)})}else{a(document.body).on("click","a[data-reveal-id]",function(c){b(c,this)})}});a.fn.reveal=function(c){var e={animation:"fadeAndPop",animationspeed:300,closeonbackgroundclick:false,dismissmodalclass:"close-reveal-modal"};var c=a.extend({},e,c);return this.each(function(){var m=a(this),i=parseInt(m.css("top")),k=m.height()+i,h=false,j=a(".ivyhrpol-bg");if(j.length==0){j=a('
    ').insertAfter(m)}m.bind("reveal:open",function(){var n=typeof window.mode_demo!=="undefined"?window.mode_demo:false;j.unbind("click.modalEvent");a("."+c.dismissmodalclass).unbind("click.modalEvent");if(!h){l();if(c.animation=="fadeAndPop"){m.css({top:a(document).scrollTop()-k,opacity:0,visibility:"visible"});if(!n){j.fadeIn(c.animationspeed/2)}m.delay(c.animationspeed/2).animate({top:a(document).scrollTop()+i+"px",opacity:1},c.animationspeed,f())}if(c.animation=="fade"){m.css({opacity:0,visibility:"visible",top:a(document).scrollTop()+i});if(!n){j.fadeIn(c.animationspeed/2)}m.delay(c.animationspeed/2).animate({opacity:1},c.animationspeed,f())}if(c.animation=="none"){m.css({visibility:"visible",top:a(document).scrollTop()+i});if(!n){j.css({display:"block"})}f()}}m.unbind("reveal:open")});m.bind("reveal:close",function(){if(!h){l();if(c.animation=="fadeAndPop"){j.delay(c.animationspeed).fadeOut(c.animationspeed);m.animate({top:a(document).scrollTop()-k+"px",opacity:0},c.animationspeed/2,function(){m.css({top:i,opacity:1,visibility:"hidden"});f()})}if(c.animation=="fade"){j.delay(c.animationspeed).fadeOut(c.animationspeed);m.animate({opacity:0},c.animationspeed,function(){m.css({opacity:1,visibility:"hidden",top:i});f()})}if(c.animation=="none"){m.css({visibility:"hidden",top:i});j.css({display:"none"})}}m.unbind("reveal:close")});m.trigger("reveal:open");var g=a("."+c.dismissmodalclass).bind("click.modalEvent",function(){m.trigger("reveal:close")});if(c.closeonbackgroundclick){j.css({cursor:"pointer"});j.bind("click.modalEvent",function(){m.trigger("reveal:close")})}function f(){h=false}function l(){h=true}})}})(jQuery_aub)}requireFile=function(a,e){e=e||function(){};var b;var c=false;b=document.createElement("script");b.src=a;b.onreadystatechange=function(){if(b.readyState==="loaded"||b.readyState==="complete"){b.onreadystatechange=null;e();c=true}};b.onload=function(){if(!c){e()}};document.head.appendChild(b)};if(typeof jQuery=="undefined"||/^1\.(0|1|2|3|4)$/.test(jQuery.fn.jquery)){var jQuery_aub;requireFile("//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js",function(){jQuery_aub=jQuery.noConflict();main()})}else{jQuery_aub=jQuery;main()};