50 votes

Qu'est-ce que la programmation fonctionnelle ?

J'ai récemment vu du Clojure ou du Scala (désolé, je ne les connais pas) et ils se sont glissés sur une liste ou quelque chose comme ça. Qu'est-ce que le zip et d'où vient-il?

80voto

Pavel Minaev Points 60647

Zip, c'est quand vous prenez deux séquences entrées, et de produire une séquence de sortie dans lequel toutes les deux éléments de l'entrée des séquences à la même position sont combinées à l'aide d'une fonction. Un exemple en Haskell:

Entrée:

zipWith (+) [1, 2, 3] [4, 5, 6]

Sortie:

[5, 7, 9]

Le ci-dessus est une définition plus générique; parfois, zip se réfère spécifiquement à une combinaison d'éléments comme des n-uplets. E. g. en Haskell à nouveau:

Entrée:

zip [1, 2, 3] [4, 5, 6]

Sortie:

[(1, 4), (2, 5), (3, 6)]

Et le plus générique version est appelée "zip avec". De toute évidence, "zip" est un cas particulier de "zipWith":

zip xs ys = zipWith (\x y -> (xs, ys)) xs ys 

22voto

drudru Points 2101

zip est une commune de la programmation fonctionnelle, méthode comme une carte ou un pli. Vous trouverez ces fonctions au début de lisps tout le chemin jusqu'à ruby et python. Ils sont conçus pour effectuer des communes de lot opérations sur les listes.

Dans ce cas particulier, zip prend deux listes crée une nouvelle liste de tuples à partir de ces listes.

par exemple, disons que vous avez eu une liste avec (1,2,3) et une autre ("un","deux","trois") Si vous zip, vous obtiendrez la Liste((1,"un"), (2,"deux"), (3,"trois"))

ou de la scala de ligne de commande, vous obtiendrez:

scala> List(1,2,3).zip(List("one","two","three"))
res2: List[(Int, java.lang.String)] = List((1,one), (2,two), (3,three))

Quand j'ai vu pour la première fois en Python, sans connaître la programmation fonctionnelle, je pensais que c'était lié au format de la compression. Après j'en ai appris plus sur la programmation fonctionnelle, j'ai utilisé de plus en plus.

10voto

bseibold Points 394

Malheureusement, je n'ai pas assez de points pour laisser même un commentaire sur la réponse du haut, mais

 zip xs ys = zipWith xs ys (\x y -> (xs, ys))
 

est faux , il devrait être:

 zip xs ys = zipWith (\x y -> (x,y)) xs ys
 

ou simplement:

 zip = zipWith (\x y -> (x,y))
 

7voto

Tempus Points 22972

Vous pouvez utiliser le code suivant en Python:

 
>>> a = [1,2]
>>> b = [3,4]
>>> zip(a,b)
[(1,3),(2,4)]
 

6voto

Mehrdad Afshari Points 204872

La réponse de Pavel le décrit à peu près. Je vais juste fournir un exemple F #:

 let x = [1;2]
let y = ["hello"; "world"]
let z = Seq.zip x y
 

La valeur de z sera une séquence contenant des tuples d'éléments dans la même position à partir des deux séquences:

 [(1, "hello"); (2, "world")]
 

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