my-server
← Wiki Redirected from Zip (higher-order function)

Zipping (computer science)

In computer science, zipping is a function which maps a tuple of sequences into a sequence of tuples. This name zip derives from the action of a zipper in that it interleaves two formerly disjoint sequences. The inverse function is unzip.

Example

Given the three words cat, fish and be where |cat| is 3, |fish| is 4 and |be| is 2. Let denote the length of the longest word which is fish; . The zip of cat, fish, be is then 4 tuples of elements:

where # is a symbol not in the original alphabet. In Haskell this truncates to the shortest sequence , where :

Definition

Let Σ be an alphabet, # a symbol not in Σ.

Let x<sub>1</sub>x<sub>2</sub>... x<sub>|x|</sub>, y<sub>1</sub>y<sub>2</sub>... y<sub>|y|</sub>, z<sub>1</sub>z<sub>2</sub>... z<sub>|z|</sub>, ... be n words (i.e. finite sequences) of elements of &Sigma;. Let denote the length of the longest word, i.e. the maximum of |x|, |y|, |z|, ... .

The zip of these words is a finite sequence of n-tuples of elements of , i.e. an element of :

,

where for any index , the w<sub>i</sub> is #.

The zip of x, y, z, ... is denoted zip(x, y, z, ...) or x ⋆ y ⋆ z ⋆ ...

The inverse to zip is sometimes denoted unzip.

A variation of the zip operation is defined by:

where is the minimum length of the input words. It avoids the use of an adjoined element , but destroys information about elements of the input sequences beyond .

In programming languages

Zip functions are often available in programming languages, often referred to as . In Lisp-dialects one can simply the desired function over the desired lists, is variadic in Lisp so it can take an arbitrary number of lists as argument. An example from Clojure:

In Common Lisp:

Languages such as Python provide a function. in conjunction with the operator unzips a list:

Haskell has a method of zipping sequences but requires a specific function for each arity ( for two sequences, for three etc.), similarly the functions and are available for unzipping:

Language comparison

List of languages by support of zip:

See also

References