2 votes

F# -> Pliage avec 2 paramètres

J'essaie de faire un pli personnalisé qui passe par ma séquence, et prend 2 Teams à la fois et les affecter à un Match puis retourner un Match list à la fin.

Mon code actuel est :

let myFold f s =
    let rec myFold' f s acc =
        match s with
        | (a1::a2::a) -> f a1 a2::acc
        | _ -> acc
    myFold' f s []

Ce qui me donne (int -> int) list

Mais de toute évidence, ça ne va pas marcher... Qu'est-ce que je fais mal ? -> Je sais que je peux simplement créer une fonction récurrente spécialement conçue pour ce scénario, mais je veux la rendre aussi abstraite que possible pour la réutiliser.

4voto

desco Points 12018

Je ne suis pas sûr d'avoir compris ce que vous voulez obtenir. À partir de la séquence [1;2;3;4], vous voulez obtenir [(1,2) ; (3,4)] ou [(1,2) ; (2,3) ; (3,4)] ?

let fold f s = 
    let rec impl acc = function
        | x::y::rest -> impl ((f x y)::acc) rest
        | _ -> List.rev acc
    impl [] s    

let s = [1;2;3;4;5;6]    
let r = fold (fun x y -> x,y) s  // [(1, 2); (3, 4); (5, 6)]

let fold2 f s = Seq.pairwise s |> Seq.map f |> Seq.toList
let r2 = fold2 id s // [(1, 2); (2, 3); (3, 4); (4, 5); (5, 6)]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X