Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Haskell] Traduction de code Java to Haskell

4 mai 2018 à 18:51:46

Bonjour,

Un ami m'a demandé d'appliqué l'algorithme de deBruijn en Haskell mais ne connaissant rien en Haskell je l'ai d'abord fait en Java en quelques lignes et il fonctionne ( YES ! ;) ).

Je vous demande si vous pouvez de m'aider à traduire ce petit code en Haskell, ce qui m'aiderait énormement !

Merci et à bientôt ;)

public class DeBruijn {

    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);

        String deBruijn = "";
        for (int i = 0; i < n; i++)
            deBruijn = deBruijn + "0";

        for (int i = n; i < (1 << n); i++) {
            String suffix = deBruijn.substring(i - n + 1);
            if (deBruijn.indexOf(suffix + "1") == -1)
                deBruijn = deBruijn + "1";
            else
                deBruijn = deBruijn + "0";
        }
        StdOut.println(deBruijn);

    }

}



  • Partager sur Facebook
  • Partager sur Twitter
5 mai 2018 à 10:39:52

Peut etre que t'y prendre avant la veille de ton rendu pourrait t'etre favorable la prochaine fois, fin bon, ce genre de réaction est normal pour les Jean-Robert qui ne peuvent pas github les nouveaux projets...
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
5 mai 2018 à 15:20:23

En fait le problème est que tu ne comprends pas la manière permettant de passer du procédural au fonctionnel.

Je n'ai que très peu touché au haskell, mais avec une recherche, quand on sait ce qu'on veut, on trouve des similitudes. Par exemple ta boucle

int n = Integer.parseInt(args[0]);
String deBruijn = "";
    for (int i = 0; i < n; i++)
        deBruijn = deBruijn + "0";

Le but est de faire de la concaténation, voir mieux de la répétition, car suivant n, tu auras un certains nombre de "0".

Avec Haskell on voit cela dans les 1ères pages du tutoriel...

Via l'interpréteur Haskell que tu as je l'espère (sinon ça risque d'être très difficile), on voit que ça fonctionne bien !

Prelude> debruijn c n  = take n (repeat c)
Prelude> debruijn '0' 5
"00000"

Donc le plus simple n'est pas de balancer un code java pour demander de traduire, mais de demander ce que tu souhaites faire afin que toi tu puisses transformer cela en Haskell.

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2018 à 3:06:29

Plus que 20h et 30 minutes.... ;)

-
Edité par Vaslyn 6 mai 2018 à 3:07:38

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2018 à 9:48:41

Bon, son exercice etait a rendre pour hier soir, donc un admin du site peut fermer ce topic sans aucun probleme.

Cordialement.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
7 mai 2018 à 10:59:35

RyanTheepulp a écrit:

Bon, son exercice etait a rendre pour hier soir, donc un admin du site peut fermer ce topic sans aucun probleme.

Cordialement.


Mais où est-ce indiqué cette information de date limite ?
  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2018 à 14:12:19

oldProgrammer a écrit:


Mais où est-ce indiqué cette information de date limite ?


Nul part, l'exercice qu'il esseye de faire est un projet du module "Programmation Fonctionnel" de l'ecole {Epitech}, et le dit projet etait a rendre hier soir.

Je me permet donc de detruire vos rêve en vous avouant que dans se monde tres peut de personne font de l'haskell, et le projet etant passé l'auteur du post ne preteras a mon sens aucunne plus attention a ce post, tout comme "son ami lui ayant demender de faire le DeBrujin".

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2018 à 18:22:06

RyanTheepulp a écrit:

Je me permet donc de detruire vos rêve en vous avouant que dans se monde tres peut de personne font de l'haskell

Raison de plus pour en faire !

  • Partager sur Facebook
  • Partager sur Twitter
28 juin 2018 à 16:08:55

Bon alors @Vikub, maintenant que le sujet est rendu ton "ami" ne te demende plus de faire une suite de deBruijn? :lol:
  • Partager sur Facebook
  • Partager sur Twitter