OK, en ajoutant la récursion :
let rec hamming = LL.consDelayed 1I (fun() ->
let l2 = LL.map ((*)2I) hamming
let l3 = LL.map ((*)3I) hamming
let l5 = LL.map ((*)5I) hamming
...
Type: Messages; Utilisateur: LLB
OK, en ajoutant la récursion :
let rec hamming = LL.consDelayed 1I (fun() ->
let l2 = LL.map ((*)2I) hamming
let l3 = LL.map ((*)3I) hamming
let l5 = LL.map ((*)5I) hamming
...
Dans le premier code, le map sert justement à obtenir les multiples.
> hamming 50 |> Seq.toList;;
val it : int list =
[1; 2; 3; 4; 5; 6; 8; 9; 10; 12; 14; 15; 16; 18; 20; 21; 22; 24; 25; 26;...
Pour éviter le stackoverflow avec les LazyList, il faut utiliser consDelayed de temps en temps.
Le code complet :
module LL = LazyList
let rec merge x y =
match x, y with
|...
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 :
let hamming n =
[ yield 1
yield! List.map ((*)2)...
Le type de ta fonction merge est :
val merge :
seq<'a> -> seq<'a> -> seq<'a> when 'a : comparison and 'a :> seq<'a>
Cela indique que les éléments de ton seq doivent être eux-mêmes des seq....
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.