CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Blabla] le /pub des barbus libres

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 04:21:34

En gros le fait de faire ça permet de faire des simplification dans le code généré c'est ça?

Vu la page en anglais j'imagine que oui :oui:

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 04:28:47

En OCaml en tout cas c’est directement traduit en boucle for dans le bytecode généré :ok:

Après certains diront que le fait de coder en continuation rend le code illisible, mais en OCaml je trouve cela plus clair :(

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 04:35:41

Le code généré par ghc est illisible (ça change de gcc) je trouve enfin c'est vraiment le bordel donc ce sera difficile à voir je pense. Mais ça me parait logique qu'une telle simplification soit importante.

Mais je l'utilise pas trop je trouve,

par exemple pour la fonction factorielle

factorial 0 = 1
factorial x = x * factorial (x-1)

C'est pas une récursivité terminale j'imagine vu que je multiplie par x mais bon d'un côté en implémentation naive je vois pas d'autres solutions :hap:

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 04:41:57

fac n = aux 1 n where aux k 0 = k; aux k m = aux (k*m) (m-1)

Par exemple :noel: (je connais pas les conventions de mise en forme en haskell)

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 04:44:12

Mais ça a pas l’air de faire une grande différence en vrai :(

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 04:50:30

fac n = aux 1 n
where aux k 0 = k
aux k m = aux (k*m)(m-1)

En Haskell

Temps d'execution de factorial 7777 avec ta fonction 0.025s et avec la mienne 0.021s

Dans ton cul la récursivité terminale :noel:

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 04:57:50

Le code source est là

Naif: http://redcloud.fr/naif.s
Chouhartem: http://redcloud.fr/chouhartem.s

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 05:02:26

Je rage :noel:

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:05:24

Mais sérieux l'assembleur qui sort de ghc est illisible :noel:

En Ocaml ton implémentation est plus rapide?

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 05:09:21

Oui, et surtout ne stack overflow pas :hap:

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:11:42

De quoi? :noel:

Sinon, ailleurs en ruby: ruby ruby.rb 0.07s user 0.01s system 97% cpu 0.082 total

:noel:

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:14:02

Pourquoi je peux pas faire les même récursions en Ruby ou Python?

RuntimeError: maximum recursion depth exceeded in comparison

:pf:

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 05:17:52

Parce que ces langages ne sont pas fait pour :noel:

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:21:05

Ah ouais de la merde :noel:

Même en C j'y arrive pas wallah

  1. include<iostream>

using namespace std;

int factorial(int n)
{
if (n == 0) {
return 1; }
else {
// cout << "* " << (n-1) << endl;
return n*factorial(n-1);
}}

int main()
{
cout << factorial(7777) << endl;
}

Sérieux c'est quoi le problème il me multiplie par 0 alors qu'il devrait pas :hap: Ca me fait penser que j'ai jamais essayé la récursion en dehors de ocaml/haskell :noel:

Dark_Chouhartem
Dark_Chouhartem
Niveau 11
27 août 2014 à 05:22:22

int overflow, tout simplement :noel:

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:25:38

Même pas je croyais mais non il me multiplie bien le résultat final par 0 le con

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:27:14

Ou alors le fait d'utiliser des long int ne suffit pas

Bordel c'est tellement mieux le monde fonctionnel :noel:

godrik
godrik
Niveau 30
27 août 2014 à 05:34:06

tous ces trucs la dependent du compilateur. Il y a des compilos C qui savent traiter la recursivite terminal et les modification simple pour rendre les codes recursif terminal et transforme le tout en boucle for. Et il y en a d'autre qui ne savent pas.

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:36:42

Bah là pour le coup c'est bien de l'overflow, j'avais oublié les limitations du C++. Y a pas moyen de travailler avec de gros nombres ça me parait étrange quand même. J'aurais bien aimé essayer

JamyGourmand
JamyGourmand
Niveau 8
27 août 2014 à 05:47:51

Okay Chouhartem j'ai l'explication :noel:

http://stackoverflow.com/questions/13042353/does-haskell-have-tail-recursive-optimization

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment