Lably
Skip to content

Map (higher-order function)

Computer programming function

  • 10 min read
  • 4 chapters

Related on Lably

Through Square (algebra), Polymorphism (computer science) and Object-oriented programming

The concept of a map is not limited to lists: it works for sequential containers, tree-like containers, or even abstract containers such as futures and promises.

Examples: mapping a list

Suppose there is a list of integers [1, 2, 3, 4, 5] . To calculate the square of each integer, one would first define a function to square a single number (shown here in Haskell):

<span id="mwIA"></span><span class="nf" id="mwIQ">square</span><span class="w" id="mwIg"> </span><span class="n" id="mwIw">x</span><span class="w" id="mwJA"> </span><span class="ow" id="mwJQ">=</span><span class="w" id="mwJg"> </span><span class="n" id="mwJw">x</span><span class="w" id="mwKA"> </span><span class="o" id="mwKQ">*</span><span class="w" id="mwKg"> </span><span class="n" id="mwKw">x</span>

Afterwards, call:

<span id="mwLw"></span><span class="o" id="mwMA">>>></span><span class="w" id="mwMQ"> </span><span class="n" id="mwMg">map</span><span class="w" id="mwMw"> </span><span class="n" id="mwNA">square</span><span class="w" id="mwNQ"> </span><span class="p" id="mwNg">[</span><span class="mi" id="mwNw">1</span><span class="p" id="mwOA">,</span><span class="w" id="mwOQ"> </span><span class="mi" id="mwOg">2</span><span class="p" id="mwOw">,</span><span class="w" id="mwPA"> </span><span class="mi" id="mwPQ">3</span><span class="p" id="mwPg">,</span><span class="w" id="mwPw"> </span><span class="mi" id="mwQA">4</span><span class="p" id="mwQQ">,</span><span class="w" id="mwQg"> </span><span class="mi" id="mwQw">5</span><span class="p" id="mwRA">]</span>

which yields [1, 4, 9, 16, 25], demonstrating that map has gone through the entire list and applied the function square to each element.

Visual example

Below, is a view of each step of the mapping process for a list of integers X = [0, 5, 8, 3, 2, 1] mapping into a new list X' according to the function f(x)=x+1 :

The map is provided as part of the Haskell's base prelude (i.e. "standard library") and is implemented as:

<span id="mwVw"></span><span class="nf" id="mwWA">map</span><span class="w" id="mwWQ"> </span><span class="ow" id="mwWg">::</span><span class="w" id="mwWw"> </span><span class="p" id="mwXA">(</span><span class="n" id="mwXQ">a</span><span class="w" id="mwXg"> </span><span class="ow" id="mwXw">-></span><span class="w" id="mwYA"> </span><span class="n" id="mwYQ">b</span><span class="p" id="mwYg">)</span><span class="w" id="mwYw"> </span><span class="ow" id="mwZA">-></span><span class="w" id="mwZQ"> </span><span class="p" id="mwZg">[</span><span class="n" id="mwZw">a</span><span class="p" id="mwaA">]</span><span class="w" id="mwaQ"> </span><span class="ow" id="mwag">-></span><span class="w" id="mwaw"> </span><span class="p" id="mwbA">[</span><span class="n" id="mwbQ">b</span><span class="p" id="mwbg">]</span> <span class="nf" id="mwbw">map</span><span class="w" id="mwcA"> </span><span class="kr" id="mwcQ">_</span><span class="w" id="mwcg"> </span><span class="kt" id="mwcw">[]</span><span class="w" id="mwdA"> </span><span class="ow" id="mwdQ">=</span><span class="w" id="mwdg"> </span><span class="kt" id="mwdw">[]</span> <span class="nf" id="mweA">map</span><span class="w" id="mweQ"> </span><span class="n" id="mweg">f</span><span class="w" id="mwew"> </span><span class="p" id="mwfA">(</span><span class="n" id="mwfQ">x</span><span class="w" id="mwfg"> </span><span class="kt" id="mwfw">:</span><span class="w" id="mwgA"> </span><span class="n" id="mwgQ">xs</span><span class="p" id="mwgg">)</span><span class="w" id="mwgw"> </span><span class="ow" id="mwhA">=</span><span class="w" id="mwhQ"> </span><span class="n" id="mwhg">f</span><span class="w" id="mwhw"> </span><span class="n" id="mwiA">x</span><span class="w" id="mwiQ"> </span><span class="kt" id="mwig">:</span><span class="w" id="mwiw"> </span><span class="n" id="mwjA">map</span><span class="w" id="mwjQ"> </span><span class="n" id="mwjg">f</span><span class="w" id="mwjw"> </span><span class="n" id="mwkA">xs</span>

Sign in to keep reading

3 more chapters are free with a Lably account.

More in Computing and communication