|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Inscription : septembre 2003 Messages : 4 436 ![]() |
Bonjour
je me lance dans le F# avec Visual 2010 et je bute sur une difficulté : J'ai ecrit une fonction merge qui est censée fusionner deux séquences : Code :
Code :
Merci
__________________
"La haine seule fait des choix" - Koan Zen "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne. Faites du Prolog, ça vous changera les idées ! Ma page Prolog Mes codes sources commentés Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi |
||||
|
|
00
|
|
|
#2 | ||||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Le type de ta fonction merge est :
Code :
La raison est que Seq.append prend un seq en premier argument. Or, tu lui donnes le premier élément de x ou y. Une correction rapide : Code :
Code :
|
||||||
|
|
00
|
|
|
#3 | ||
![]() ![]() Inscription : septembre 2003 Messages : 4 436 ![]() |
Merci pour ta réponse. Ça fonctionne bien mieux maintenant, je soupsonnais un truc comme ça mais comme c'était une séquence je mettais des accolades précédées de seq au lieu de crochets et évidemment ça ne compilait pas.
Ce que je veux faire c'est essayer de transcrire ce code Haskell, qui calcule les nombres de Hamming en F# : Code :
__________________
"La haine seule fait des choix" - Koan Zen "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne. Faites du Prolog, ça vous changera les idées ! Ma page Prolog Mes codes sources commentés Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi |
||
|
|
00
|
|
|
#4 | ||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
C'est un code vraiment pensé en Haskell.
Si tu peux laisser la paresse de côté et calculer les nombres jusqu'à n, tu peux faire ça : Code :
En général, seq est utile quand on veut de la paresse. On utilise les fonctions du module Seq pour itérer ou combiner. Pour ta fonction, je n'ai pas trouvé de façon simple de faire, on pourrait écrire notre propre itérateur, mais ce n'est pas super pratique. Dans ton cas, je te conseille d'utiliser les LazyList du PowerPack (#r "FSharp.Powerpack.dll"), tu devrais obtenir à peu près la même chose qu'en Haskell : Code :
|
||||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Pour éviter le stackoverflow avec les LazyList, il faut utiliser consDelayed de temps en temps.
Le code complet : Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2003 Messages : 4 436 ![]() |
Ton premier code ne calcule pas les nombres de Hamming qui sont uniquement des multiples de 2 3 et 5, la liste [1..n/2] introduit des nombres incorrects (7 11 ...).
D'autre part, je ne peux pas compiler cette ligne module LL = LazyList, peut-être dois-je faire un open de quelque chose. [EDIT] je viens de voir qu'il faut ajouter le powerPack, comment on fait ???[/EDIT] [EDIT bis]Problème réglé [/EDIT bis]
__________________
"La haine seule fait des choix" - Koan Zen "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne. Faites du Prolog, ça vous changera les idées ! Ma page Prolog Mes codes sources commentés Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Dans le premier code, le map sert justement à obtenir les multiples.
Code :
Je laisse le lien du powerpack (ça servira à d'autres) : http://fsharppowerpack.codeplex.com |
||
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : septembre 2003 Messages : 4 436 ![]() |
Non, c'est pour ça que je faisais une récursion à partir de la liste initiale [1], les résultats sont :
Citation:
Pour le powerPack, il faut ajouter la référence dans le projet (en plus du téléchargement de la dll)
__________________
"La haine seule fait des choix" - Koan Zen "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne. Faites du Prolog, ça vous changera les idées ! Ma page Prolog Mes codes sources commentés Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi |
|
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
OK, en ajoutant la récursion :
Code :
|
||
|
|
00
|
|
|
#10 | ||
![]() ![]() Inscription : septembre 2003 Messages : 4 436 ![]() |
J'arrive a un stackoverflow avec ça dès hamming 24 !!!
Code :
__________________
"La haine seule fait des choix" - Koan Zen "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne. Faites du Prolog, ça vous changera les idées ! Ma page Prolog Mes codes sources commentés Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi |
||
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : septembre 2003 Messages : 4 436 ![]() |
Nos messages se sont croisés, effectivement tout est une question d'initialisation !
Merci
__________________
"La haine seule fait des choix" - Koan Zen "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne. Faites du Prolog, ça vous changera les idées ! Ma page Prolog Mes codes sources commentés Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com