Donc mon code donne le résultat voulu mais je me demande s'il y a un meilleur moyen de le coder. Ceci est l'exemple donné:haskell optimise le code liste infini
pair [ 1 , 2 , 3 , 4 , 5 , 6 , ... ]
[ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] , ... ]
et le code donné:
pair::[a] -> [[a]]
pair =
Ma solution:
pair :: [a] -> [[a]]
pair (x:y:xs) = ((x:y:[]):[]) ++ pair xs
Ne jamais concaténer les listes si vous pouvez utiliser ':': '++' dans * O (n) * (avec * n * la taille de la première liste) alors que ':' fonctionne dans * O (1) * . –
@WillemVanOnsem Mais si la taille de la première liste est * O (1) * comme dans tous les cas, vous pouvez facilement remplacer '(++)' par '(:)' alors '(++)' est aussi * O (1)*. Donc, alors que '(:)' peut être un facteur constant plus rapide que '(++)' asymptotiquement, ils sont identiques. – jpath
Vous n'avez pas posé de question. –