Apply a callback to an array: Difference between revisions

(add link to Delphi for pascal)
(270 intermediate revisions by more than 100 users not shown)
Line 1:
{{task|Basic language learning}}[[Category:Iteration]]
{{task|Basic language learning}}
In this task, the goal is to take a combined set of elements and apply a function to each element.
 
;Task:
Take a combined set of elements and apply a function to each element.
<br><br>
 
=={{header|11l}}==
{{trans|Kotlin}}
<syntaxhighlight lang="11l">V array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
V arrsq = array.map(i -> i * i)
print(arrsq)</syntaxhighlight>
{{out}}
<pre>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]</pre>
 
=={{header|6502 Assembly}}==
For this example, assume both the source array and the destination have a size of 86 elements (memory offsets base+0x00 to base+0x55.)
This was implemented in easy6502.
<syntaxhighlight lang="6502asm">define SRC_LO $00
define SRC_HI $01
 
define DEST_LO $02
define DEST_HI $03
 
define temp $04 ;temp storage used by foo
 
;some prep work since easy6502 doesn't allow you to define arbitrary bytes before runtime.
 
SET_TABLE:
TXA
STA $1000,X
INX
BNE SET_TABLE
;stores the identity table at memory address $1000-$10FF
 
CLEAR_TABLE:
LDA #0
STA $1200,X
INX
BNE CLEAR_TABLE
;fills the range $1200-$12FF with zeroes.
 
 
LDA #$10
STA SRC_HI
LDA #$00
STA SRC_LO
;store memory address $1000 in zero page
 
LDA #$12
STA DEST_HI
LDA #$00
STA DEST_LO
;store memory address $1200 in zero page
 
 
loop:
LDA (SRC_LO),y ;load accumulator from memory address $1000+y
JSR foo ;multiplies accumulator by 3.
STA (DEST_LO),y ;store accumulator in memory address $1200+y
 
INY
CPY #$56 ;alternatively you can store a size variable and check that here instead.
BCC loop
BRK
 
foo:
STA temp
ASL ;double accumulator
CLC
ADC temp ;2a + a = 3a
RTS</syntaxhighlight>
 
 
 
{{out}}
<pre>
1200: 00 03 06 09 0c 0f 12 15 18 1b 1e 21 24 27 2a 2d
1210: 30 33 36 39 3c 3f 42 45 48 4b 4e 51 54 57 5a 5d
1220: 60 63 66 69 6c 6f 72 75 78 7b 7e 81 84 87 8a 8d
1230: 90 93 96 99 9c 9f a2 a5 a8 ab ae b1 b4 b7 ba bd
1240: c0 c3 c6 c9 cc cf d2 d5 d8 db de e1 e4 e7 ea ed
1250: f0 f3 f6 f9 fc ff
</pre>
 
=={{header|68000 Assembly}}==
{{trans|11l}}
The following assumes all code/data is stored/executed in RAM and is therefore mutable.
<syntaxhighlight lang="68000devpac">LEA MyArray,A0
MOVE.W #(MyArray_End-MyArray)-1,D7 ;Len(MyArray)-1
MOVEQ #0,D0 ;sanitize D0-D2 to ensure nothing from any previous work will affect our math.
MOVEQ #0,D1
MOVEQ #0,D2
 
loop:
MOVE.B (A0),D0
MOVE.B D0,D1
MOVE.B D0,D2
MULU D1,D2
MOVE.B D2,(A0)+
dbra d7,loop
jmp * ;halt the CPU
 
MyArray:
DC.B 1,2,3,4,5,6,7,8,9,10
MyArray_End:</syntaxhighlight>
 
 
=={{header|8th}}==
The builtin word "a:map" does this:
<syntaxhighlight lang="forth">
[ 1 , 2, 3 ]
' n:sqr
a:map
</syntaxhighlight>
That results in the array [1,4,9]
 
=={{header|ACL2}}==
 
ACL2 does not have first-class functions; this is close, however:
 
<syntaxhighlight lang="lisp">(defun apply-to-each (xs)
(if (endp xs)
nil
(cons (fn-to-apply (first xs))
(sq-each (rest xs)))))
 
(defun fn-to-apply (x)
(* x x))
</syntaxhighlight>
 
=={{header|ActionScript}}==
<langsyntaxhighlight lang="actionscript">package
{
public class ArrayCallback
Line 21 ⟶ 149:
}
}
}</langsyntaxhighlight>
 
=={{header|Ada}}==
{{works with|GNAT|GPL 2005}}
<langsyntaxhighlight lang="ada">with Ada.Text_Io;
with Ada.Integer_text_IO;
Line 61 ⟶ 189:
begin
Map(Sample, Display'access);
end Call_Back_Example;</langsyntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">void
map(list l, void (*fp) (object))
{
integerl.ucall(fp, i0);
 
i = 0;
while (i < l_length(l)) {
fp(l_query(l, i));
i += 1;
}
}
 
 
void
out(object o)
{
o_integero_(o, "\n");
o_byte(10);
}
 
 
integer
main(void)
{
list(0, l1, 2, 3).map(out);
 
l_append(l, 0);
l_append(l, 1);
l_append(l, 2);
l_append(l, 3);
 
map(l, out);
 
return 0;
}</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
Line 105 ⟶ 217:
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of FORMATted transput}}
<langsyntaxhighlight lang="algol68"> PROC call back proc = (INT location, INT value)VOID:
(
printf(($"array["g"] = "gl$, location, value))
Line 121 ⟶ 233:
[4]INT array := ( 1, 4, 9, 16 );
map(array, call back proc)
)</langsyntaxhighlight>
 
Output:
{{Out}}
<pre>
array[ +1] = +1
Line 129 ⟶ 242:
array[ +4] = +16
</pre>
 
=={{header|ALGOL W}}==
<syntaxhighlight lang="algolw">begin
procedure printSquare ( integer value x ) ; writeon( i_w := 1, s_w := 0, " ", x * x );
% applys f to each element of a from lb to ub (inclusive) %
procedure applyI ( procedure f; integer array a ( * ); integer value lb, ub ) ;
for i := lb until ub do f( a( i ) );
% test applyI %
begin
integer array a ( 1 :: 3 );
a( 1 ) := 1; a( 2 ) := 2; a( 3 ) := 3;
applyI( printSquare, a, 1, 3 )
end
end.</syntaxhighlight>
 
=={{header|APL}}==
By default functions in APL work on arrays as it is an array oriented language. Some examples:
 
<syntaxhighlight lang="apl"> - 1 2 3
¯1 ¯2 ¯3
2 * 1 2 3 4
2 4 8 16
2 × ⍳4
2 4 6 8
3 * 3 3 ⍴ ⍳9
3 9 27
81 243 729
2187 6561 19683
</syntaxhighlight>
 
=={{header|AppleScript}}==
<syntaxhighlight lang="applescript">on callback for arg
-- Returns a string like "arc has 3 letters"
arg & " has " & (count arg) & " letters"
end callback
 
set alist to {"arc", "be", "circle"}
repeat with aref in alist
-- Passes a reference to some item in alist
-- to callback, then speaks the return value.
say (callback for aref)
end repeat</syntaxhighlight>
 
If the callback would <code>set arg's contents to "something"</code>, then <code>alist</code> would be mutated.
 
 
For a more general implementation of '''map(function, list)''', '''foldl(function, startValue, list)''', and '''filter(predicate, list)''', we could write:
 
<syntaxhighlight lang="applescript">on run
set xs to {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{map(square, xs), ¬
filter(even, xs), ¬
foldl(add, 0, xs)}
--> {{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}, {2, 4, 6, 8, 10}, 55}
end run
 
-- square :: Num -> Num -> Num
on square(x)
x * x
end square
 
-- add :: Num -> Num -> Num
on add(a, b)
a + b
end add
 
-- even :: Int -> Bool
on even(x)
0 = x mod 2
end even
 
 
-- GENERIC HIGHER ORDER FUNCTIONS
 
-- filter :: (a -> Bool) -> [a] -> [a]
on filter(f, xs)
tell mReturn(f)
set lst to {}
set lng to length of xs
repeat with i from 1 to lng
set v to item i of xs
if |λ|(v, i, xs) then set end of lst to v
end repeat
return lst
end tell
end filter
 
-- foldl :: (a -> b -> a) -> a -> [b] -> a
on foldl(f, startValue, xs)
tell mReturn(f)
set v to startValue
set lng to length of xs
repeat with i from 1 to lng
set v to |λ|(v, item i of xs, i, xs)
end repeat
return v
end tell
end foldl
 
-- Lift 2nd class handler function into 1st class script wrapper
-- mReturn :: First-class m => (a -> b) -> m (a -> b)
on mReturn(f)
if class of f is script then
f
else
script
property |λ| : f
end script
end if
end mReturn
 
-- map :: (a -> b) -> [a] -> [b]
on map(f, xs)
tell mReturn(f)
set lng to length of xs
set lst to {}
repeat with i from 1 to lng
set end of lst to |λ|(item i of xs, i, xs)
end repeat
return lst
end tell
end map</syntaxhighlight>
{{Out}}
<pre>{{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}, {2, 4, 6, 8, 10}, 55}</pre>
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">arr: [1 2 3 4 5]
 
print map arr => [2*&]</syntaxhighlight>
{{out}}
 
<pre>2 4 6 8 10</pre>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">map("callback", "3,4,5")
 
callback(array){
Line 140 ⟶ 390:
map(callback, array){
%callback%(array)
}</langsyntaxhighlight>
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk">$ awk 'func psqr(x){print x,x*x}BEGIN{split("1 2 3 4 5",a);for(i in a)psqr(a[i])}'
4 16
5 25
1 1
2 4
3 9</langsyntaxhighlight>
 
=={{header|Babel}}==
 
Let us define a squaring operator:
 
<syntaxhighlight lang="babel">sq { dup * } <</syntaxhighlight>
 
Now, we apply the sq operator over a list and display the result using the lsnum utility:
 
<syntaxhighlight lang="babel">( 0 1 1 2 3 5 8 13 21 34 ) { sq ! } over ! lsnum !</syntaxhighlight>
 
{{Out}}
<pre>( 0 1 1 4 9 25 64 169 441 1156 )</pre>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<syntaxhighlight lang="bbcbasic"> DIM a(4)
a() = 1, 2, 3, 4, 5
PROCmap(a(), FNsqrt())
FOR i = 0 TO 4
PRINT a(i)
NEXT
END
DEF FNsqrt(n) = SQR(n)
DEF PROCmap(array(), RETURN func%)
LOCAL I%
FOR I% = 0 TO DIM(array(),1)
array(I%) = FN(^func%)(array(I%))
NEXT
ENDPROC
</syntaxhighlight>
{{Out}}
<pre>
1
1.41421356
1.73205081
2
2.23606798
</pre>
 
=={{header|Binary Lambda Calculus}}==
In the lambda calculus, we can map over a list as in https://github.com/tromp/AIT/blob/master/lists/map.lam, which gives the following BLC program to negate every bit of input:
<pre>010001101000000101100000000001011000000101111111010110010111111101111110111010</pre>
 
=={{header|BQN}}==
<syntaxhighlight lang="bqn">Square ← ט
 
array ← 2‿3‿5‿7‿11‿13
 
Square¨ array</syntaxhighlight>
The use of the ¨ modifier is the general approach, but actually not necessary with arithmetic functions.
{{out}}
<pre>⟨ 4 9 25 49 121 169 ⟩</pre>
 
=={{header|Bracmat}}==
<syntaxhighlight lang="bracmat">( ( callbackFunction1
= location value
. !arg:(?location,?value)
& out$(str$(array[ !location "] = " !!value))
)
& ( callbackFunction2
= location value
. !arg:(?location,?value)
& !!value^2:?!value
)
& ( mapar
= arr len callback i
. !arg:(?arr,?len,?callback)
& 0:?i
& whl
' ( !i:<!len
& !callback$(!i,!i$!arr)
& 1+!i:?i
)
)
& tbl$(array,4)
& 1:?(0$array)
& 2:?(1$array)
& 3:?(2$array)
& 4:?(3$array)
& mapar$(array,4,callbackFunction1)
& mapar$(array,4,callbackFunction2)
& mapar$(array,4,callbackFunction1)
);</syntaxhighlight>
{{Out}}
<pre>array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[0] = 1
array[1] = 4
array[2] = 9
array[3] = 16</pre>
 
=={{header|Brat}}==
 
<langsyntaxhighlight lang="brat">#Print out each element in array
[:a :b :c :d :e].each { element |
p element
}</langsyntaxhighlight>
 
Alternatively:
 
<langsyntaxhighlight lang="brat">[:a :b :c :d :e].each ->p</langsyntaxhighlight>
 
=={{header|C}}==
 
'''callback.h'''
<langsyntaxhighlight lang="c">#ifndef CALLBACK_H
#define CALLBACK_H
 
Line 179 ⟶ 524:
void map(int* array, int len, void(*callback)(int,int));
 
#endif</langsyntaxhighlight>
 
'''callback.c'''
<langsyntaxhighlight lang="c">#include <stdio.h>
#include "callback.h"
 
Line 208 ⟶ 553:
map(array, 4, callbackFunction);
return 0;
}</langsyntaxhighlight>
 
'''Output'''
 
{{Out}}
<pre>
array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
</pre>
 
=={{header|C sharp|C#}}==
{{works with|C sharp|C#|3.0+}}
This version uses the C# 3 lambda notation.
 
<syntaxhighlight lang="csharp">int[] intArray = { 1, 2, 3, 4, 5 };
// Simplest method: LINQ, functional
int[] squares1 = intArray.Select(x => x * x).ToArray();
 
// Slightly fancier: LINQ, query expression
int[] squares2 = (from x in intArray
select x * x).ToArray();
 
// Or, if you only want to call a function on each element, just use foreach
foreach (var i in intArray)
Console.WriteLine(i * i);</syntaxhighlight>
 
=={{header|C sharp}}==
{{works with|C sharp|C#|2.0+}}
 
{{works with|Visual C sharp|Visual C#|2005}}
<langsyntaxhighlight lang="csharp">using System;
 
static class Program
Line 254 ⟶ 615:
Console.WriteLine(value * value);
}
}</langsyntaxhighlight>
 
{{works with|C sharp|C#|3.0+}}
This version uses the C# 3 lambda notation.
 
<lang csharp>int[] intArray = { 1, 2, 3, 4, 5 };
Array.ForEach(intArray, i => Console.WriteLine(i * i));</lang>
 
=={{header|C++}}==
Line 266 ⟶ 621:
{{works with|g++|4.1.1}}
===C-Style Array===
<langsyntaxhighlight lang="cpp">#include <iostream> //cout for printing
#include <algorithm> //for_each defined here
 
Line 281 ⟶ 636:
return 0;
}
//prints 1 4 9 16 25</langsyntaxhighlight>
 
===std::vector===
{{libheader|STL}}
<langsyntaxhighlight lang="cpp">#include <iostream> // cout for printing
#include <algorithm> // for_each defined here
#include <vector> // stl vector class
Line 306 ⟶ 661:
return 0;
}
//prints 1 4 9 16 25</langsyntaxhighlight>
 
More tricky with binary function
<langsyntaxhighlight lang="cpp">#include <iostream> // cout for printing
#include <algorithm> // for_each defined here
#include <vector> // stl vector class
Line 332 ⟶ 687:
return 0;
}
//prints 1x 2x 3x 4x 5x</langsyntaxhighlight>
 
===Boost.Lambda===
{{libheader|Boost}}
<langsyntaxhighlight lang="cpp">using namespace std;
using namespace boost::lambda;
vector<int> ary(10);
int i = 0;
for_each(ary.begin(), ary.end(), _1 = ++var(i)); // init array
transform(ary.begin(), ary.end(), ostream_iterator<int>(cout, " "), _1 * _1); // square and output</langsyntaxhighlight>
 
===C++11===
<syntaxhighlight lang="cpp">#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main() {
std::vector<int> intVec(10);
std::iota(std::begin(intVec), std::end(intVec), 1 ); // Fill the vector
std::transform(std::begin(intVec) , std::end(intVec), std::begin(intVec),
[](int i) { return i * i ; } ); // Transform it with closures
std::copy(std::begin(intVec), end(intVec) ,
std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
return 0;
}</syntaxhighlight>
 
=={{header|Clean}}==
Line 347 ⟶ 719:
Define a function and an initial (unboxed) array.
 
<langsyntaxhighlight lang="clean">square x = x * x
 
values :: {#Int}
values = {x \\ x <- [1 .. 10]}</langsyntaxhighlight>
 
One can easily define a map for arrays, which is overloaded and works for all kinds of arrays (lazy, strict, unboxed).
 
<langsyntaxhighlight lang="clean">mapArray f array = {f x \\ x <-: array}</langsyntaxhighlight>
 
Apply the function to the initial array (using a comprehension) and print result.
 
<langsyntaxhighlight lang="clean">Start :: {#Int}
Start = mapArray square values</langsyntaxhighlight>
 
=={{header|Clio}}==
'''Math operations'''
<syntaxhighlight lang="clio">[1 2 3 4] * 2 + 1 -> print</syntaxhighlight>
'''Quick functions'''
<syntaxhighlight lang="text">[1 2 3 4] -> * n: n * 2 + 1 -> print</syntaxhighlight>
'''Anonymous function'''
<syntaxhighlight lang="clio">[1 2 3 4]
-> * fn n:
n * 2 + 1
-> print</syntaxhighlight>
'''Named function'''
<syntaxhighlight lang="clio">fn double-plus-one n:
n * 2 + 1
 
[1 2 3 4] -> * double-plus-one -> print</syntaxhighlight>
 
=={{header|Clojure}}==
 
<syntaxhighlight lang="lisp">;; apply a named function, inc
(map inc [1 2 3 4])</syntaxhighlight>
 
<syntaxhighlight lang="lisp">;; apply a function
(map (fn [x] (* x x)) [1 2 3 4])</syntaxhighlight>
 
<syntaxhighlight lang="lisp">;; shortcut syntax for a function
(map #(* % %) [1 2 3 4])</syntaxhighlight>
 
=={{header|CLU}}==
<syntaxhighlight lang="clu">% This procedure will call a given procedure with each element
% of the given array. Thanks to CLU's type parameterization,
% it will work for any type of element.
apply_to_all = proc [T: type] (a: array[T], f: proctype(int,T))
for i: int in array[T]$indexes(a) do
f(i, a[i])
end
end apply_to_all
 
% Callbacks for both string and int
show_int = proc (i, val: int)
po: stream := stream$primary_output()
stream$putl(po, "array[" || int$unparse(i) || "] = " || int$unparse(val));
end show_int
 
show_string = proc (i: int, val: string)
po: stream := stream$primary_output()
stream$putl(po, "array[" || int$unparse(i) || "] = " || val);
end show_string
 
% Here's how to use them
start_up = proc ()
po: stream := stream$primary_output()
ints: array[int] := array[int]$[2, 3, 5, 7, 11]
strings: array[string] := array[string]$
["enemy", "lasagna", "robust", "below", "wax"]
stream$putl(po, "Ints: ")
apply_to_all[int](ints, show_int)
stream$putl(po, "\nStrings: ")
apply_to_all[string](strings, show_string)
end start_up</syntaxhighlight>
{{out}}
<pre>Ints:
array[1] = 2
array[2] = 3
array[3] = 5
array[4] = 7
array[5] = 11
 
Strings:
array[1] = enemy
array[2] = lasagna
array[3] = robust
array[4] = below
array[5] = wax</pre>
 
=={{header|COBOL}}==
{{Works with|COBOL 2002}}
Basic implementation of a map function:
<syntaxhighlight lang="cobolfree"> >>SOURCE FORMAT IS FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. map.
 
DATA DIVISION.
LOCAL-STORAGE SECTION.
01 i USAGE IS INDEX.
01 table-size CONSTANT AS 30.
LINKAGE SECTION.
01 table-param.
03 table-values USAGE IS FLOAT-LONG, OCCURS table-size TIMES.
01 func-ptr USAGE IS PROGRAM-POINTER.
 
PROCEDURE DIVISION USING BY REFERENCE table-param, BY VALUE func-ptr.
PERFORM VARYING i FROM 1 BY 1 UNTIL i IS GREATER THAN table-size
CALL func-ptr USING BY REFERENCE table-values(i)
END-PERFORM
GOBACK.
 
END PROGRAM map.</syntaxhighlight>
 
=={{header|CoffeeScript}}==
<syntaxhighlight lang="coffeescript">
map = (arr, f) -> (f(e) for e in arr)
arr = [1, 2, 3, 4, 5]
f = (x) -> x * x
console.log map arr, f # prints [1, 4, 9, 16, 25]
</syntaxhighlight>
 
=={{header|Common Lisp}}==
Line 365 ⟶ 846:
Imperative: print 1, 2, 3, 4 and 5:
 
<langsyntaxhighlight lang="lisp">(map nil #'print #(1 2 3 4 5))</langsyntaxhighlight>
 
Functional: collect squares into new vector that is returned:
 
<langsyntaxhighlight lang="lisp">(defun square (x) (* x x))
(map 'vector #'square #(1 2 3 4 5))</langsyntaxhighlight>
 
Destructive, like the Javascript example; add 1 to every slot of vector *a*:
 
<langsyntaxhighlight lang="lisp">(defvar *a* (vector 1 2 3))
(map-into *a* #'1+ *a*)</langsyntaxhighlight>
 
=={{header|ClojureComponent Pascal}}==
BlackBox Component Builder
<syntaxhighlight lang="oberon2">
MODULE Callback;
IMPORT StdLog;
 
TYPE
<lang lisp>;; apply a named function, inc
Callback = PROCEDURE (x: INTEGER;OUT doubled: INTEGER);
(map inc [1 2 3 4])</lang>
Callback2 = PROCEDURE (x: INTEGER): INTEGER;
PROCEDURE Apply(proc: Callback; VAR x: ARRAY OF INTEGER);
VAR
i: INTEGER;
BEGIN
FOR i := 0 TO LEN(x) - 1 DO;
proc(x[i],x[i]);
END
END Apply;
PROCEDURE Apply2(func: Callback2; VAR x: ARRAY OF INTEGER);
VAR
i: INTEGER;
BEGIN
FOR i := 0 TO LEN(x) - 1 DO;
x[i] := func(x[i]);
END
END Apply2;
PROCEDURE Double(x: INTEGER; OUT y: INTEGER);
BEGIN
y := x * x;
END Double;
PROCEDURE Double2(x: INTEGER): INTEGER;
BEGIN
RETURN x * x
END Double2;
PROCEDURE Do*;
VAR
i: INTEGER;
ary: ARRAY 10 OF INTEGER;
BEGIN
FOR i := 0 TO LEN(ary) - 1 DO ary[i] := i END;
Apply(Double,ary);
FOR i := 0 TO LEN(ary) - 1 DO
StdLog.Int(ary[i]);StdLog.Ln
END;
StdLog.Ln;
Apply2(Double2,ary);
FOR i := 0 TO LEN(ary) - 1 DO
StdLog.Int(ary[i]);StdLog.Ln
END
END Do;
END Callback.
</syntaxhighlight>
Execute: ^Q Callback.Do<br/>
{{Out}}
<pre>
0
1
4
9
16
25
36
49
64
81
 
0
<lang lisp>;; apply a function
1
(map (fn [x] (* x x)) [1 2 3 4])</lang>
16
81
256
625
1296
2401
4096
6561
</pre>
 
=={{header|Crystal}}==
<lang lisp>;; shortcut syntax for a function
Calling with a block
(map #(* % %) [1 2 3 4])</lang>
<syntaxhighlight lang="ruby">values = [1, 2, 3]
 
new_values = values.map do |number|
number * 2
end
 
puts new_values #=> [2, 4, 6]</syntaxhighlight>
 
Calling with a function/method
<syntaxhighlight lang="ruby">values = [1, 2, 3]
 
def double(number)
number * 2
end
 
# the `->double(Int32)` syntax creates a proc from a function/method. argument types must be specified.
# the `&proc` syntax passes a proc as a block.
# combining the two passes a function/method as a block
new_values = values.map &->double(Int32)
 
puts new_values #=> [2, 4, 6]</syntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">import std.stdio, std.algorithm;
 
void main() {
auto arrayitems = [1, 2, 3, 4, 5];
auto m = items.map!q{a(x => x + 5})(array);
writeln(m);
}</langsyntaxhighlight>
{{out}}
Output:
<pre>[6, 7, 8, 9, 10]</pre>
 
=={{header|Delphi}}==
<syntaxhighlight lang="delphi">
<lang Delphi>
// Declare the callback function
procedure callback(const AInt:Integer);
Line 418 ⟶ 996:
callback(myArray[i]);
end.
</syntaxhighlight>
</lang>
 
=={{header|Dyalect}}==
 
<syntaxhighlight lang="dyalect">func Array.Select(pred) {
let ys = []
for x in this when pred(x) {
ys.Add(x)
}
return ys
}
var arr = [1, 2, 3, 4, 5]
var squares = arr.Select(x => x * x)
print(squares)</syntaxhighlight>
 
=={{header|Déjà Vu}}==
There is a <code>map</code> builtin that does just this.
<syntaxhighlight lang="dejavu">!. map @++ [ 1 4 8 ]
 
#implemented roughly like this:
#map f lst:
# ]
# for i in lst:
# f i
# [</syntaxhighlight>
{{out}}
<pre>[ 2 5 9 ]</pre>
 
=={{header|E}}==
 
<langsyntaxhighlight lang="e">def array := [1,2,3,4,5]
def square(value) {
return value * value
}</langsyntaxhighlight>
 
Example of builtin iteration:
 
<langsyntaxhighlight lang="e">def callback(index, value) {
println(`Item $index is $value.`)
}
array.iterate(callback)</langsyntaxhighlight>
 
There is no built-in map function '''yet'''. The following is one of the ways one could be implemented, returning a plain list (which is usually an array in implementation).
The following is one of the ways one could be implemented,
returning a plain list (which is usually an array in implementation).
 
<langsyntaxhighlight lang="e">def map(func, collection) {
def output := [].diverge()
for item in collection {
Line 444 ⟶ 1,051:
return output.snapshot()
}
println(map(square, array))</langsyntaxhighlight>
 
=={{header|EchoLisp}}==
<syntaxhighlight lang="scheme">
(vector-map sqrt #(0 4 16 49))
→ #( 0 2 4 7)
;; or
(map exp #(0 1 2))
→ #( 1 2.718281828459045 7.38905609893065)
;; or
(for/vector ([elem #(2 3 4)] [i (in-naturals)]) (printf "v[%d] = %a" i elem) (* elem elem))
v[0] = 2
v[1] = 3
v[2] = 4
→ #( 4 9 16)
</syntaxhighlight>
 
=={{header|Efene}}==
 
<langsyntaxhighlight lang="efene">square = fn (N) {
N * N
}
Line 480 ⟶ 1,102:
io.format("squares3 : ~p~n", [squares3(Numbers)])
}
</syntaxhighlight>
</lang>
 
=={{header|EGL}}==
<syntaxhighlight lang="egl">delegate callback( i int ) returns( int ) end
 
program ApplyCallbackToArray
function main()
values int[] = [ 1, 2, 3, 4, 5 ];
 
func callback = square;
for ( i int to values.getSize() )
values[ i ] = func( values[ i ] );
end
for ( i int to values.getSize() )
SysLib.writeStdout( values[ i ] );
end
end
function square( i int ) returns( int )
return( i * i );
end
end</syntaxhighlight>
 
=={{header|Elena}}==
ELENA 6.x :
<syntaxhighlight lang="elena">import system'routines;
 
PrintSecondPower(n){ console.writeLine(n * n) }
<lang elena>#define std'patterns'*.
#define std'routines'*.
#define std'dictionary'*.
 
public program()
#symbol PrintSecondPower
{
= aNumber => ('program'output << aNumber * aNumber << "%n").
new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.forEach(PrintSecondPower)
}</syntaxhighlight>
 
=={{header|Elixir}}==
#symbol Program =>
<syntaxhighlight lang="elixir">
[
Enum.map([1, 2, 3], fn(n) -> n * 2 end)
// first version
Enum.map [1, 2, 3], &(&1 * 2)
Scan::(1, 2, 3, 4, 5) run:PrintSecondPower.
</syntaxhighlight>
 
// second version
{{Out}}
(ArrayEnumerator::(6, 7, 8, 9, 10))~foreach run: anItem => (PrintSecondPower eval:anItem).
<pre>
].
[2, 4, 6]
</lang>
</pre>
 
=={{header|Erlang}}==
A list would be more commonly used in Erlang rather than an array.
 
<syntaxhighlight lang="erlang">
<lang Erlang>
1> L = [1,2,3].
[1,2,3]
</syntaxhighlight>
</lang>
 
You can use lists:foreach/2 if you just want to apply the callback to each element of the list.
 
<syntaxhighlight lang="text">
2> lists:foreach(fun(X) -> io:format("~w ",[X]) end, L).
1 2 3 ok
</syntaxhighlight>
</lang>
 
Or you can use lists:map/2 if you want to create a new list with the result of the callback on each element.
 
<syntaxhighlight lang="erlang">
<lang Erlang>
3> lists:map(fun(X) -> X + 1 end, L).
[2,3,4]
</syntaxhighlight>
</lang>
 
Or you can use lists:foldl/3 if you want to accumulate the result of the callback on each element into one value.
 
<syntaxhighlight lang="erlang">
<lang Erlang>
4> lists:foldl(fun(X, Sum) -> X + Sum end, 0, L).
6
</syntaxhighlight>
</lang>
 
=={{header|ERRE}}==
<syntaxhighlight lang="text">
PROGRAM CALLBACK
 
!
! for rosettacode.org
!
 
DIM A[5]
 
FUNCTION CBACK(X)
CBACK=2*X-1
END FUNCTION
 
PROCEDURE PROCMAP(ZETA,DUMMY(X)->OUTP)
OUTP=DUMMY(ZETA)
END PROCEDURE
 
BEGIN
A[1]=1 A[2]=2 A[3]=3 A[4]=4 A[5]=5
FOR I%=1 TO 5 DO
PROCMAP(A[I%],CBACK(X)->OUTP)
PRINT(OUTP;)
END FOR
PRINT
END PROGRAM
</syntaxhighlight>
This example shows how to pass a function to a procedure.
{{Out}}
<pre>
1 3 5 7 9
</pre>
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">function apply_to_all(sequence s, integer f)
-- apply a function to all elements of a sequence
sequence result
Line 548 ⟶ 1,228:
-- add1() is visible here, so we can ask for its routine id
? apply_to_all({1, 2, 3}, routine_id("add1"))
-- displays {2,3,4}</langsyntaxhighlight>
This is also "Example 2" in the Euphoria documentation for <code>routine_id()</code>.
Note that this example will not work for multi-dimensional sequences.
 
=={{header|F_Sharp|F#}}==
Apply a named function to each member of the array. The result is a new array of the same size as the input.
<syntaxhighlight lang="fsharp">let evenp x = x % 2 = 0
let result = Array.map evenp [| 1; 2; 3; 4; 5; 6 |]</syntaxhighlight>
The same can be done using anonymous functions, this time squaring the members of the input array.
<syntaxhighlight lang="fsharp">let result = Array.map (fun x -> x * x) [|1; 2; 3; 4; 5|]</syntaxhighlight>
Use ''iter'' if the applied function does not return a value.
<syntaxhighlight lang="fsharp">Array.iter (fun x -> printfn "%d" x) [|1; 2; 3; 4; 5|]</syntaxhighlight>
 
=={{header|Factor}}==
Print each element squared:
<langsyntaxhighlight lang="factor">{ 1 2 3 4 } [ sq . ] each</langsyntaxhighlight>
 
Collect return values:
<langsyntaxhighlight lang="factor">{ 1 2 3 4 } [ sq ] map</langsyntaxhighlight>
 
=={{header|Fantom}}==
Line 563 ⟶ 1,252:
In Fantom, functions can be passed to a collection iterator, such as 'each'. 'map' is used similarly, and the results are collected into a list.
 
<langsyntaxhighlight lang="fantom">
class Main
{
Line 573 ⟶ 1,262:
}
}
</syntaxhighlight>
</lang>
 
{{Out}}
Output:
<pre>
1
Line 584 ⟶ 1,273:
[1, 4, 9, 16, 25]
</pre>
 
=={{header|FBSL}}==
'''User-defined mapping function:'''
<syntaxhighlight lang="qbasic">#APPTYPE CONSOLE
 
FOREACH DIM e IN MyMap(Add42, {1, 2, 3})
PRINT e, " ";
NEXT
 
PAUSE
 
FUNCTION MyMap(f, a)
DIM ret[]
FOREACH DIM e IN a
ret[] = f(e)
NEXT
RETURN ret
END FUNCTION
 
FUNCTION Add42(n): RETURN n + 42: END FUNCTION</syntaxhighlight>
{{Out}}
<pre>43 44 45
Press any key to continue...</pre>
 
'''Standard MAP() function:'''
<syntaxhighlight lang="qbasic">#APPTYPE CONSOLE
 
DIM languages[] = {{"English", {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}}, _
{"French", {"un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix"}}}
 
MAP(SpeakALanguage, languages)
 
PAUSE
 
SUB NameANumber(lang, nb, number)
PRINT "The number ", nb, " is called ", STRENC(number), " in ", lang
END SUB
 
SUB SpeakALanguage(lang)
MAP(NameANumber, lang[0], 1 TO 10, lang[1])
PRINT LPAD("", 40, "-")
END SUB</syntaxhighlight>
{{Out}}
<pre>The number 1 is called "one" in English
The number 2 is called "two" in English
The number 3 is called "three" in English
The number 4 is called "four" in English
The number 5 is called "five" in English
The number 6 is called "six" in English
The number 7 is called "seven" in English
The number 8 is called "eight" in English
The number 9 is called "nine" in English
The number 10 is called "ten" in English
----------------------------------------
The number 1 is called "un" in French
The number 2 is called "deux" in French
The number 3 is called "trois" in French
The number 4 is called "quatre" in French
The number 5 is called "cinq" in French
The number 6 is called "six" in French
The number 7 is called "sept" in French
The number 8 is called "huit" in French
The number 9 is called "neuf" in French
The number 10 is called "dix" in French
----------------------------------------
Press any key to continue...</pre>
 
=={{header|Fe}}==
<syntaxhighlight lang="clojure">
(= map (fn (f lst)
(let res (cons nil nil))
(let tail res)
(while lst
(setcdr tail (cons (f (car lst)) nil))
(= lst (cdr lst))
(= tail (cdr tail)))
(cdr res)))
 
(print (map (fn (x) (* x x)) '(1 2 3 4 5 6 7 8 9 10)))
</syntaxhighlight>
 
=={{header|Forth}}==
Line 589 ⟶ 1,358:
This is a word that will call a given function on each cell in an array.
 
<langsyntaxhighlight lang="forth">: map ( addr n fn -- )
-rot cells bounds do i @ over execute i ! cell +loop ;</langsyntaxhighlight>
 
Example usage:
 
{{Out|Example usage}}
<lang forth>create data 1 , 2 , 3 , 4 , 5 ,
<syntaxhighlight lang="forth">create data 1 , 2 , 3 , 4 , 5 ,
data 5 ' 1+ map \ adds one to each element of data</lang>
data 5 ' 1+ map \ adds one to each element of data</syntaxhighlight>
 
=={{header|Fortran}}==
Line 601 ⟶ 1,369:
 
{{Works with |Fortran|ISO 95 and later}}
<langsyntaxhighlight lang="fortran">module arrCallback
contains
elemental function cube( x )
Line 609 ⟶ 1,377:
cube = x * x * x
end function cube
end module arrCallback</langsyntaxhighlight>
 
<langsyntaxhighlight lang="fortran">program testAC
use arrCallback
implicit none
Line 627 ⟶ 1,395:
write(*,*) b(i,:)
end do
end program testAC</langsyntaxhighlight>
 
{{Works with|ANSI FORTRAN| 77 (with MIL-STD-1753 structured DO) and later}}
<langsyntaxhighlight lang="fortran"> program test
C
C-- Declare array:
Line 643 ⟶ 1,411:
end do
C
end</langsyntaxhighlight>
 
=={{header|FP}}==
<langsyntaxhighlight lang="fp">{square * . [id, id]}
& square: <1,2,3,4,5></langsyntaxhighlight>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Sub PrintEx(n As Integer)
Print n, n * n, n * n * n
End Sub
 
Sub Proc(a() As Integer, callback As Sub(n As Integer))
For i As Integer = LBound(a) To UBound(a)
callback(i)
Next
End Sub
 
Dim a(1 To 10) As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Print " n", "n^2", "n^3"
Print " -", "---", "---"
Proc(a(), @PrintEx)
Print
Print "Press any key to quit the program"
Sleep</syntaxhighlight>
 
{{out}}
<pre>
n n^2 n^3
- --- ---
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
</pre>
 
=={{header|Frink}}==
<syntaxhighlight lang="frink">
f = {|x| x^2} // Anonymous function to square input
a = [1,2,3,5,7]
println[map[f, a]]
</syntaxhighlight>
 
=={{header|FunL}}==
<syntaxhighlight lang="funl">[1, 2, 3].foreach( println )
 
[1, 2, 3].foreach( a -> println(2a) )</syntaxhighlight>
 
{{out}}
 
<pre>
1
2
3
2
4
6
</pre>
 
=={{header|Futhark}}==
<syntaxhighlight lang="futhark">
map f l
</syntaxhighlight>
e.g.
<syntaxhighlight lang="futhark">
map (\x->x+1) [1,2,3] -- [2,3,4]
</syntaxhighlight>
or equivalently
<syntaxhighlight lang="futhark">
map (+1) [1,2,3] -- [2,3,4]
</syntaxhighlight>
 
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
 
include "NSLog.incl"
 
void local fn Callback( n as NSInteger )
NSLog( @"Square root of %ld = %f", n, sqr(n) )
end fn
 
void local fn DoIt
NSUInteger i, count
CFArrayRef array = @[@1, @2, @3, @4, @5, @6, @7, @8, @9, @10]
 
count = len(array)
for i = 0 to count -1
fn Callback( fn NumberIntegerValue( array[i] ) )
next
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
 
Another option is to enumerate the array.
<syntaxhighlight lang="futurebasic">include "NSLog.incl"
 
void local fn Callback( array as CFArrayRef, obj as CFTypeRef )
long value = intVal(obj)
NSLog( @"Square root of %ld = %f", value, sqr(value) )
end fn
 
void local fn DoIt
CFArrayRef array = @[@1, @2, @3, @4, @5, @6, @7, @8, @9, @10]
ArrayEnumerateObjects( array, @fn Callback, NULL )
end fn
 
fn DoIt
 
HandleEvents</syntaxhighlight>
 
{{out}}
<pre>
Square root of 1 = 1.000000
Square root of 2 = 1.414214
Square root of 3 = 1.732051
Square root of 4 = 2.000000
Square root of 5 = 2.236068
Square root of 6 = 2.449490
Square root of 7 = 2.645751
Square root of 8 = 2.828427
Square root of 9 = 3.000000
Square root of 10 = 3.162278
</pre>
 
=={{header|Fōrmulæ}}==
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/Apply_a_callback_to_an_array}}
 
'''Solution'''
 
Most programming languages define a high-order map function. In Fōrmulæ, there is ''arraization'' (by analogy with ''summation''). In the following expression, the "big" curly braces resembles the "big" sigma of a summation:
 
[[File:Fōrmulæ - Apply a callback to an array 01.png]]
 
[[File:Fōrmulæ - Apply a callback to an array 02.png]]
 
The elements of the array are not required to be of the same type:
 
[[File:Fōrmulæ - Apply a callback to an array 03.png]]
 
[[File:Fōrmulæ - Apply a callback to an array 04.png]]
 
=={{header|F_Sharp|F#}}==
Apply a named function to each member of the array. The result is a new array of the same size as the input.
<lang fsharp>let evenp x = x % 2 = 0
let result = Array.map evenp [| 1; 2; 3; 4; 5; 6 |]</lang>
The same can be done using anonymous functions, this time squaring the members of the input array.
<lang fsharp>let result = Array.map (fun x -> x * x) [|1; 2; 3; 4; 5|]</lang>
Use ''iter'' if the applied function does not return a value.
<lang fsharp>Array.iter (fun x -> printfn "%d" x) [|1; 2; 3; 4; 5|]</lang>
=={{header|GAP}}==
<langsyntaxhighlight lang="gap">a := [1 .. 4];
b := ShallowCopy(a);
 
Line 667 ⟶ 1,575:
 
# Apply and don't change values
List(b, n -> n*n);
# [ 1, 4, 9, 16 ]
 
# Apply and don't return anything (only side effects)
Perform(b, Display);
1
Line 674 ⟶ 1,586:
 
b;
# [ 1 .. 4 ]</langsyntaxhighlight>
 
=={{header|Go}}==
{{trans|Ruby}}
<lang go>package main
The task was originally written with a Ruby example, so here are Go versions of the current Ruby examples.
 
Perhaps in contrast to Ruby, it is idiomatic in Go to use the for statement:
<syntaxhighlight lang="go">package main
 
import "fmt"
 
func main() {
func applyCallback(a []int, f func(int) int) {
for i_, ei := range a[]int{1, 2, 3, 4, 5} {
a[fmt.Println(i] =* f(ei)
}
}</syntaxhighlight>
 
Alternatively though, an array-like type can be defined and callback-style methods can be defined on it to apply a function to the elements.
<syntaxhighlight lang="go">package main
 
import "fmt"
 
type intSlice []int
 
func (s intSlice) each(f func(int)) {
for _, i := range s {
f(i)
}
}
 
func inc(ns intSlice) Map(f func(int) int) intSlice {
r := make(intSlice, len(s))
return n+1
for j, i := range s {
r[j] = f(i)
}
return r
}
 
func main() {
as := []intintSlice{31, 12, 3, 4, 5}
 
applyCallback(a, inc)
fmts.Printlneach(afunc(i int) {
fmt.Println(i * i)
}</lang>
})
 
fmt.Println(s.Map(func(i int) int {
return i * i
}))
}</syntaxhighlight>
{{out}}
<pre>
1
4
9
16
25
[1 4 9 16 25]
</pre>
 
=={{header|Groovy}}==
 
Print each value in a list
<langsyntaxhighlight lang="groovy">[1,2,3,4].each { println it }</langsyntaxhighlight>
 
Create a new list containing the squares of another list
<langsyntaxhighlight lang="groovy">[1,2,3,4].collect { it * it }</langsyntaxhighlight>
 
=={{header|Haskell}}==
Line 709 ⟶ 1,657:
===List===
{{works with|GHC}}
<langsyntaxhighlight lang="haskell">let square x = x*x
let values = [1..10]
map square values</langsyntaxhighlight>
 
Using list comprehension to generate a list of the squared values
<langsyntaxhighlight lang="haskell">[square x | x <- values]</langsyntaxhighlight>
 
More directly
<syntaxhighlight lang="haskell">[1 .. 10] >>= pure . (^ 2)</syntaxhighlight>
 
Or with one less layer of monadic wrapping
<syntaxhighlight lang="haskell">(^ 2) <$> [1..10]</syntaxhighlight>
 
Using function composition to create a function that will print the squares of a list
<langsyntaxhighlight lang="haskell">let printSquares = mapM_ (print.square)
printSquares values</langsyntaxhighlight>
 
===Array===
{{works with|GHC|7.10.3}}
<langsyntaxhighlight lang="haskell">import Data.Array.IArray (Array, listArray)
 
let square x = x*x
square :: Int -> Int
let values = array (1,10) [(i,i)|i <- [1..10]] :: Array Int Int
amap square values</lang>x = x * x
 
values :: Array Int Int
values = listArray (1, 10) [1 .. 10]
 
main :: IO ()
main = print $ fmap square values</syntaxhighlight>
{{Out}}
<pre>array (1,10) [(1,1),(2,4),(3,9),(4,16),(5,25),(6,36),(7,49),(8,64),(9,81),(10,100)]</pre>
 
=={{header|Guish}}==
{{works with|guish|2.5.1}}
<syntaxhighlight lang="guish">
# applies add2 (adds 2) to each element
add2 = {
return add(@1, 2)
}
l = {1, 2, 3, 4, 5, 6, 7}
puts each(add2, flat(@l))
</syntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight lang="icon">procedure main()
local lst
lst := [10, 20, 30, 40]
Line 736 ⟶ 1,709:
procedure callback(p,arg)
return p(" -> ", arg)
end</langsyntaxhighlight>
 
=={{header|IDL}}==
Line 742 ⟶ 1,715:
Hard to come up with an example that isn't completely contrived. IDL doesn't really distinguish between a scalar and an array; thus
 
<langsyntaxhighlight lang="idl">b = a^3</langsyntaxhighlight>
 
will yield a scalar if <tt>a</tt> is scalar or a vector if <tt>a</tt> is a vector or an n-dimensional array if <tt>a</tt> is an n-dimensional array
 
=={{header|Insitux}}==
 
<syntaxhighlight lang="insitux">; apply a named function
(map inc [1 2 3 4])</syntaxhighlight>
 
<syntaxhighlight lang="insitux">; apply a parameterised closure
(map (fn x (+ x 1)) [1 2 3 4])</syntaxhighlight>
 
<syntaxhighlight lang="insitux">; apply a non-parameterised closure
(map #(+ % 1) [1 2 3 4])</syntaxhighlight>
 
<syntaxhighlight lang="insitux">; apply an explicit partial closure
(map @(+ 1) [1 2 3 4])</syntaxhighlight>
 
<syntaxhighlight lang="insitux">; apply an implicit partial closure
(map (+ 1) [1 2 3 4])</syntaxhighlight>
 
=={{header|Io}}==
<langsyntaxhighlight lang="io">list(1,2,3,4,5) map(squared)</langsyntaxhighlight>
 
=={{header|J}}==
 
'''Solution''':
<langsyntaxhighlight lang="j"> "_1</langsyntaxhighlight>
 
'''Example''':
<langsyntaxhighlight lang="j"> callback =: *:
array =: 1 2 3 4 5
callback"_1 array
1 4 9 16 25</langsyntaxhighlight>
 
But note that this is a trivial example since <code>*: 1 2 3 4 5</code> would get the same result. Then again, this is something of a trivial exercise in J since all of J is designed around the idea of applying functions usefully to arrays.
 
=={{header|Jakt}}==
<syntaxhighlight lang="jakt">
fn map<T, U>(anon array: [T], function: fn(anon x: T) -> U) throws -> [U] {
mut result: [U] = []
result.ensure_capacity(array.size())
for item in array {
result.push(value: function(item))
}
return result
}
 
fn main() {
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let array_squared = map(array, function: fn(anon n: i64) => n * n)
println("{}", array_squared)
}
</syntaxhighlight>
 
{{out}}
<pre>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
</pre>
 
=={{header|Java}}==
 
AsUp ofto theJava current version of Java7, you have to define an interface for each type of function you want to use. The next version of Java will introduce function types.
The <code>IntConsumer</code> performs an action (which doesn't return anything) on an array of ints,
while the <code>IntToInt</code> is used to replace the array values.
 
<syntaxhighlight lang="java">public class ArrayCallback7 {
So if you want to perform an action (which doesn't return anything) on an array of int's:
 
<lang java> interface IntToVoidIntConsumer {
void run(int x);
}
}
 
interface IntToInt {
int run(int x);
}
 
static void forEach(int[] arr, IntConsumer consumer) {
for (int z : myIntArray) {
new IntToVoid for (int i : arr) {
public void consumer.run(int xi) {;
System.out.println(x);
}
}.run(z);
}</lang>
 
static void update(int[] arr, IntToInt mapper) {
Or if you want to perform "map" - return an array of the results of function applications:
for (int i = 0; i < arr.length; i++) {
arr[i] = mapper.run(arr[i]);
}
}
 
public static void main(String[] args) {
<lang java>interface IntToInt {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int run(int x);
}
 
forEach(numbers, new IntConsumer() {
int[] result = new int[myIntArray.length];
public void run(int x) {
for (int i = 0; i < myIntArray.length; i++) {
System.out.println(x);
result[i] =
new IntToInt() { }
});
 
update(numbers, new IntToInt() {
@Override
public int run(int x) {
return x * x;
}
}.run(myIntArray[i]);
}</lang>
 
forEach(numbers, new IntConsumer() {
=={{header|JavaScript}}==
public void run(int x) {
System.out.println(x);
}
});
}
}</syntaxhighlight>
 
Using Java 8 streams:
Portable technique:
{{works with|Java|8}}
 
<syntaxhighlight lang="java">import java.util.Arrays;
<lang javascript>function map(a, func) {
for (var i in a)
a[i] = func(a[i]);
}
 
public class ArrayCallback {
var a = [1, 2, 3, 4, 5];
map(a, function(v) { return v * v; });</lang>
 
public static void main(String[] args) {
{{libheader|BeyondJS}}
int[] myIntArray = {1, 2, 3, 4, 5};
With the [http://w3future.com/html/beyondJS/ BeyondJS] library:
 
int sum = Arrays.stream(myIntArray)
<lang javascript>var a = (1).to(10).collect(Math.pow.curry(undefined,2));</lang>
.map(x -> {
int cube = x * x * x;
System.out.println(cube);
return cube;
})
.reduce(0, (left, right) -> left + right); // <-- could substitute .sum() for .reduce(...) here.
System.out.println("sum: " + sum);
}
}</syntaxhighlight>
 
=={{header|JavaScript}}==
With Firefox 2.0:
 
===ES3===
<lang javascript>function cube(num) {
<syntaxhighlight lang="javascript">function map(a, func) {
return Math.pow(num, 3);
var ret = [];
for (var i = 0; i < a.length; i++) {
ret[i] = func(a[i]);
}
return ret;
}
 
map([1, 2, 3, 4, 5], function(v) { return v * v; });</syntaxhighlight>
var numbers = [1, 2, 3, 4, 5];
 
===ES5===
// get results of calling cube on every element
<syntaxhighlight lang="javascript">[1, 2, 3, 4, 5].map(function(v) { return v * v; });</syntaxhighlight>
var cubes1 = numbers.map(cube);
 
===ES6===
// display each result in a separate dialog
<syntaxhighlight lang="javascript">[1, 2, 3, 4, 5].map(v => v * v);</syntaxhighlight>
cubes1.forEach(alert);
 
The result is always:
// array comprehension
var cubes2 = [cube(n) for each (n in numbers)];
var cubes3 = [n * n * n for each (n in numbers)];</lang>
 
<pre>[1, 4, 9, 16, 25]</pre>
{{libheader|Functional}}
<lang javascript>Functional.map('x*x*x', [1,2,3,4,5])</lang>
 
=={{header|TIScriptJoy}}==
<syntaxhighlight lang="joy">[1 2 3 4 5] [dup *] map.</syntaxhighlight>
 
=={{header|jq}}==
JavaScript alike:
<syntaxhighlight lang="jq"># Illustration of map/1 using the builtin filter: exp
map(exp) # exponentiate each item in the input list
 
# A compound expression can be specified as the argument to map, e.g.
<lang javascript>var a = [1, 2, 3, 4, 5];
a.map(function (v. * .) {+ returnsqrt v) # x*x v;+ }sqrt(x)
</lang>
 
# The compound expression can also be a composition of filters, e.g.
Using short form of lambda notation:
map( sqrt|floor ) # the floor of the sqrt
<lang javascript>var a = [1, 2, 3, 4, 5];
a.map( :v: v*v );
</lang>
 
# Array comprehension
=={{header|Joy}}==
reduce .[] as $n ([]; . + [ exp ])
<lang joy>[1 2 3 4 5] [dup *] map.</lang>
 
# Elementwise operation
[.[] + 1 ] # add 1 to each element of the input array
</syntaxhighlight>Here is a transcript illustrating how the last of these jq expressions can be evaluated:
<syntaxhighlight lang="jq">$ jq -c ' [.[] + 1 ]'
[0, 1 , 10]
[1,2,11]</syntaxhighlight>
 
=={{header|Jsish}}==
<syntaxhighlight lang="javascript">/* Apply callback, in Jsish using array.map() */
;[1, 2, 3, 4, 5].map(function(v,i,a) { return v * v; });
 
/*
=!EXPECTSTART!=
[1, 2, 3, 4, 5].map(function(v,i,a) { return v * v; }) ==> [ 1, 4, 9, 16, 25 ]
=!EXPECTEND!=
*/</syntaxhighlight>
 
{{out}}
<pre>prompt$ jsish -u applyCallback.jsi
[PASS] applyCallback.jsi</pre>
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
<syntaxhighlight lang="julia">numbers = [1, 3, 5, 7]
 
@show [n ^ 2 for n in numbers] # list comprehension
square(x) = x ^ 2; @show map(square, numbers) # functional form
@show map(x -> x ^ 2, numbers) # functional form with anonymous function
@show [n * n for n in numbers] # no need for a function,
@show numbers .* numbers # element-wise operation
@show numbers .^ 2 # includes .+, .-, ./, comparison, and bitwise operations as well</syntaxhighlight>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scala">fun main(args: Array<String>) {
val array = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // build
val function = { i: Int -> i * i } // function to apply
val list = array.map { function(it) } // process each item
println(list) // print results
}</syntaxhighlight>
{{out}}
<pre>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]</pre>
 
=={{header|Klingphix}}==
<syntaxhighlight lang="klingphix">include ..\Utilitys.tlhy
 
( 1 2 3 4 ) [dup *] map
 
pstack
 
" " input</syntaxhighlight>
{{out}}
<pre>((1, 4, 9, 16))</pre>
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
{A.map {lambda {:x} {* :x :x}} {A.new 1 2 3 4 5 6 7 8 9 10}}
-> [1,4,9,16,25,36,49,64,81,100]
</syntaxhighlight>
 
=={{header|Lang}}==
<syntaxhighlight lang="lang">
&arr = fn.arrayGenerateFrom(fn.inc, 10)
fn.println(&arr)
fn.arrayMap(&arr, fn.combC(fn.pow, 2))
fn.println(&arr)
</syntaxhighlight>
{{out}}
<pre>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
</pre>
 
=={{header|Lang5}}==
<syntaxhighlight lang="lang5">: square(*) dup * ;
[1 2 3 4 5] square . "\n" .
[1 2 3 4 5] 'square apply . "\n" .</syntaxhighlight>
 
=={{header|langur}}==
<syntaxhighlight lang="langur">writeln map fn{^2}, 1..10</syntaxhighlight>
 
{{out}}
<pre>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]</pre>
 
=={{header|Lasso}}==
<syntaxhighlight lang="lasso">define cube(n::integer) => #n*#n*#n
 
local(
mynumbers = array(1, 2, 3, 4, 5),
mycube = array
)
 
#mynumbers -> foreach => {
#mycube -> insert(cube(#1))
}
 
#mycube</syntaxhighlight>
-> array(1, 8, 27, 64, 125)
 
=={{header|Lisaac}}==
<langsyntaxhighlight Lisaaclang="lisaac">+ a : ARRAY(INTEGER);
+ b : {INTEGER;};
 
Line 865 ⟶ 2,000:
};
 
a.foreach b;</langsyntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">to square :x
output :x * :x
end
show map "square [1 2 3 4 5] ; [1 4 9 16 25]
show map [? * ?] [1 2 3 4 5] ; [1 4 9 16 25]
foreach [1 2 3 4 5] [print square ?] ; 1 4 9 16 25, one per line</langsyntaxhighlight>
 
=={{header|Lua}}==
 
Say we have an array:
<langsyntaxhighlight lang="lua">myArray = {1, 2, 3, 4, 5}</langsyntaxhighlight>
A map function for this would be
<langsyntaxhighlight lang="lua">map = function(f, data)
local result = {}
for k,v in ipairs(data) do
Line 886 ⟶ 2,021:
end
return result
end</langsyntaxhighlight>
Together with our array and a square function this yields:
<langsyntaxhighlight lang="lua">myFunc = function(x) return x*x end
 
print(unpack( map(myFunc, myArray) ))
--> 1 4 9 16 25</langsyntaxhighlight>
If you used pairs() instead of ipairs(), this would even work on a hash table in general.
However, remember that hash table do not have an implicit ordering on their elements, like arrays do,
so pairs() is not guaranteed to return the elements in the same order as ipairs()
 
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
a=(1,2,3,4,5)
b=lambda->{
push number**2
}
Print a#map(b) ' 1 4 9 16 25
Print a#map(b, b) ' 1 16 81 256 625
b=lambda (z) ->{
=lambda z ->{
push number**z
}
}
Print a#map(b(2)) ' 1 4 9 16 25
Print a#map(b(3)) ' 1 8 27 64 125
 
\\ second example
a=(1,2,3,4,5)
class s {sum=0}
\\ s is a pointer to an instance of s()
s->s()
c=lambda s -> {
push number+number
s=>sum=stackitem() ' peek the value from stack
}
\\ c passed by value to fold(), but has a pointer to s
Print a#fold(c, 100)=115
Print s=>sum=115
 
</syntaxhighlight>
 
=={{header|M4}}==
<langsyntaxhighlight M4lang="m4">define(`foreach', `pushdef(`$1')_foreach($@)popdef(`$1')')dnl
define(`_arg1', `$1')dnl
define(`_foreach', `ifelse(`$2', `()', `',
Line 905 ⟶ 2,071:
dnl
define(`z',`eval(`$1*2') ')dnl
apply(`(1,2,3)',`z')</langsyntaxhighlight>
 
{{Out}}
Output:
<pre>
2 4 6
</pre>
 
=={{header|MathematicaMaple}}==
For lists and sets, which in Maple are immutable, a new object is returned.
<lang Mathematica>(#*#)& /@ {1, 2, 3, 4}
Either the built-in procedure map, or the short syntax of a trailing tilde (~) on the applied operator may be used.
<syntaxhighlight lang="maple">
> map( sqrt, [ 1.1, 3.2, 5.7 ] );
[1.048808848, 1.788854382, 2.387467277]
 
Map[Function[#*#]> map( x -> x + 1, { 1, 2, 3, 45 }]</lang> );
{2, 4, 6}
 
> sqrt~( [ 1.1, 3.2, 5.7 ] );
[1.048808848, 1.788854382, 2.387467277]
 
> (x -> x + 1)~( { 1, 3, 5 } );
{2, 4, 6}
</syntaxhighlight>
For Arrays (Vectors, Matrices, etc.) both map and trailing tilde also work, and by default create a new object, leaving the input Array unchanged.
<syntaxhighlight lang="maple">
> a := Array( [ 1.1, 3.2, 5.7 ] );
a := [1.1, 3.2, 5.7]
 
> sqrt~( a );
[1.048808848, 1.788854382, 2.387467277]
 
> a;
[1.1, 3.2, 5.7]
 
> map( sqrt, a );
[1.048808848, 1.788854382, 2.387467277]
 
> a;
[1.1, 3.2, 5.7]
</syntaxhighlight>
However, since these are mutable data structures in Maple, it is possible to use map to modify its input according to the applied procedure.
<syntaxhighlight lang="maple">
> map[inplace]( sqrt, a );
[1.048808848, 1.788854382, 2.387467277]
 
> a;
[1.048808848, 1.788854382, 2.387467277]
</syntaxhighlight>
The Array a has been modified.
 
It is also possible to pass additional arguments to the mapped procedure.
<syntaxhighlight lang="maple">
> map( `+`, [ 1, 2, 3 ], 3 );
[4, 5, 6]
</syntaxhighlight>
Passing additional arguments *before* the arguments from the mapped data structure is achieved using map2, or the more general map[n] procedure.
<syntaxhighlight lang="maple">
> map2( `-`, 5, [ 1, 2, 3 ] );
[4, 3, 2]
 
> map[2]( `/`, 5, [ 1, 2, 3 ] );
[5, 5/2, 5/3]
</syntaxhighlight>
 
=={{header|Mathematica}}//{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">(#*#)& /@ {1, 2, 3, 4}
Map[Function[#*#], {1, 2, 3, 4}]
Map[((#*#)&,{1,2,3,4}]
Map[Function[w,w*w],{1,2,3,4}]</syntaxhighlight>
 
=={{header|MATLAB}}==
Line 921 ⟶ 2,145:
Example:
For both of these function the first argument is a function handle for the function we would like to apply to each element. The second argument is the array whose elements are modified by the function. The function can be any function, including user defined functions.
<langsyntaxhighlight MATLABlang="matlab">>> array = [1 2 3 4 5]
 
array =
Line 955 ⟶ 2,179:
Column 5
 
-3.380515006246586</langsyntaxhighlight>
 
=={{header|Maxima}}==
<syntaxhighlight lang="maxima">/* for lists or sets */
 
map(sin, [1, 2, 3, 4]);
map(sin, {1, 2, 3, 4});
 
/* for matrices */
 
matrixmap(sin, matrix([1, 2], [2, 4]));</syntaxhighlight>
 
=={{header|min}}==
{{works with|min|0.19.3}}
<syntaxhighlight lang="min">(1 2 3 4 5) (sqrt puts) foreach ; print each square root
(1 2 3 4 5) 'sqrt map ; collect return values</syntaxhighlight>
 
=={{header|Modula-3}}==
<langsyntaxhighlight lang="modula3">MODULE Callback EXPORTS Main;
 
IMPORT IO, Fmt;
Line 983 ⟶ 2,222:
BEGIN
Map(sample, NUMBER(sample), callback);
END Callback.</langsyntaxhighlight>
 
=={{header|Nanoquery}}==
<syntaxhighlight lang="nanoquery">// create a list of numbers 1-10
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// display the list as it is
println numbers
// square each element in the list
for i in range(1, len(numbers) - 1)
numbers[i] = numbers[i] * numbers[i]
end
// display the squared list
println numbers</syntaxhighlight>
{{out}}
<pre>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]</pre>
 
=={{header|Nemerle}}==
The <tt>Nemerle.Collections</tt> namespace defines the methods <tt>Iter()</tt> (if the function applied is <tt>void</tt>) and <tt>Map()</tt> (if the function applied returns a value).
<syntaxhighlight lang="nemerle">def seg = array[1, 2, 3, 5, 8, 13];
def squares = seq.Map(x => x*x);</syntaxhighlight>
 
=={{header|NetLogo}}==
<syntaxhighlight lang="netlogo">
;; NetLogo “anonymous procedures”
;; stored in a variable, just to show it can be done.
let callback [ [ x ] x * x ]
show (map callback [ 1 2 3 4 5 ])
</syntaxhighlight>
 
=={{header|NewLISP}}==
 
<langsyntaxhighlight NewLISPlang="newlisp">> (map (fn (x) (* x x)) '(1 2 3 4))
(1 4 9 16)
</syntaxhighlight>
</lang>
 
=={{header|NGS}}==
<syntaxhighlight lang="ngs">{
[1, 2, 3, 4, 5].map(F(x) x*x)
}</syntaxhighlight>
 
=={{header|Nial}}==
 
<langsyntaxhighlight lang="nial">each (* [first, first] ) 1 2 3 4
=1 4 9 16</langsyntaxhighlight>
 
=={{header|Nim}}==
 
<syntaxhighlight lang="nim">
from std/sequtils import apply
let arr = @[1,2,3,4]
arr.apply proc(some: int) = echo(some, " squared = ", some*some)</syntaxhighlight>
 
{{Out}}
1 squared = 1
2 squared = 4
3 squared = 9
4 squared = 16
 
=={{header|Nutt}}==
<syntaxhighlight lang="Nutt">
module main
imports native.io.output.say
 
operator |> (arr:Array,f:Procedure):Array==>{f(x) of x |-> arr}
 
say({0,1,2,3,4,5}|>a==>a+2)//|{2,3,4,5,6,7}
 
end
</syntaxhighlight>
 
 
=={{header|Oberon-2}}==
{{Works with|oo2x}}
<syntaxhighlight lang="oberon2">
MODULE ApplyCallBack;
IMPORT
Out := NPCT:Console;
 
TYPE
Fun = PROCEDURE (x: LONGINT): LONGINT;
Ptr2Ary = POINTER TO ARRAY OF LONGINT;
 
VAR
a: ARRAY 5 OF LONGINT;
x: ARRAY 3 OF LONGINT;
r: Ptr2Ary;
 
PROCEDURE Min(x,y: LONGINT): LONGINT;
BEGIN
IF x <= y THEN RETURN x ELSE RETURN y END;
END Min;
 
PROCEDURE Init(VAR a: ARRAY OF LONGINT);
BEGIN
a[0] := 0;
a[1] := 1;
a[2] := 2;
a[3] := 3;
a[4] := 4;
END Init;
 
PROCEDURE Fun1(x: LONGINT): LONGINT;
BEGIN
RETURN x * 2
END Fun1;
 
PROCEDURE Fun2(x: LONGINT): LONGINT;
BEGIN
RETURN x DIV 2;
END Fun2;
 
PROCEDURE Fun3(x: LONGINT): LONGINT;
BEGIN
RETURN x + 3;
END Fun3;
PROCEDURE Map(F: Fun; VAR x: ARRAY OF LONGINT);
VAR
i: LONGINT;
BEGIN
FOR i := 0 TO LEN(x) - 1 DO
x[i] := F(x[i])
END
END Map;
 
PROCEDURE Map2(F: Fun; a: ARRAY OF LONGINT; VAR r: ARRAY OF LONGINT);
VAR
i,l: LONGINT;
BEGIN
l := Min(LEN(a),LEN(x));
FOR i := 0 TO l - 1 DO
r[i] := F(a[i])
END
END Map2;
 
PROCEDURE Map3(F: Fun; a: ARRAY OF LONGINT): Ptr2Ary;
VAR
r: Ptr2Ary;
i: LONGINT;
BEGIN
NEW(r,LEN(a));
FOR i := 0 TO LEN(a) - 1 DO
r[i] := F(a[i]);
END;
RETURN r
END Map3;
 
PROCEDURE Show(a: ARRAY OF LONGINT);
VAR
i: LONGINT;
BEGIN
FOR i := 0 TO LEN(a) - 1 DO
Out.Int(a[i],4)
END;
Out.Ln
END Show;
BEGIN
Init(a);Map(Fun1,a);Show(a);
Init(a);Map2(Fun2,a,x);Show(x);
Init(a);r := Map3(Fun3,a);Show(r^);
END ApplyCallBack.
</syntaxhighlight>
{{Out}}
<pre>
0 2 4 6 8
0 0 1
3 4 5 6 7
</pre>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
use Structure;
 
Line 1,019 ⟶ 2,419:
}
}
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
This function is part of the standard library:
 
<syntaxhighlight lang ="ocaml">Array.map</langsyntaxhighlight>
 
Usage example:
<langsyntaxhighlight lang="ocaml">let square x = x * x;;
let values = Array.init 10 ((+) 1);;
Array.map square values;;</langsyntaxhighlight>
 
Or with lists (which are more typical in OCaml):
<langsyntaxhighlight lang="ocaml">let values = [1;2;3;4;5;6;7;8;9;10];;
List.map square values;;</langsyntaxhighlight>
 
Use <tt>iter</tt> if the applied function does not return a value.
 
<langsyntaxhighlight lang="ocaml">Array.iter (fun x -> Printf.printf "%d" x) [|1; 2; 3; 4; 5|];;</langsyntaxhighlight>
<langsyntaxhighlight lang="ocaml">List.iter (fun x -> Printf.printf "%d" x) [1; 2; 3; 4; 5];;</langsyntaxhighlight>
 
with partial application we can also write:
 
<langsyntaxhighlight lang="ocaml">Array.iter (Printf.printf "%d") [|1; 2; 3; 4; 5|];;</langsyntaxhighlight>
<langsyntaxhighlight lang="ocaml">List.iter (Printf.printf "%d") [1; 2; 3; 4; 5];;</langsyntaxhighlight>
 
=={{header|Octave}}==
Line 1,049 ⟶ 2,449:
Almost all the built-in can operate on each element of a vector or matrix; e.g. sin([pi/2, pi, 2*pi]) computes the function sin on pi/2, pi and 2*pi (returning a vector). If a function does not accept vectors/matrices as arguments, the <tt>arrayfun</tt> can be used.
 
<langsyntaxhighlight lang="octave">function e = f(x, y)
e = x^2 + exp(-1/(y+1));
endfunction
Line 1,055 ⟶ 2,455:
% f([2,3], [1,4]) gives and error, but
arrayfun(@f, [2, 3], [1,4])
% works</langsyntaxhighlight>
 
(The function <tt>f</tt> can be rewritten so that it can accept vectors as argument simply changing operators to their dot ''relatives'': <code>e = x.^2 + exp(-1 ./ (y.+1))</code>)
 
=={{header|Odin}}==
 
<syntaxhighlight lang="odin">package main
 
import "core:slice"
import "core:fmt"
 
squared :: proc(x: int) -> int {
return x * x
}
 
main :: proc() {
arr := []int{1, 2, 3, 4, 5}
res := slice.mapper(arr, squared)
 
fmt.println(res) // prints: [1, 4, 9, 16, 25]
}</syntaxhighlight>
 
=={{header|Oforth}}==
apply allows to perform a function on all elements of a list :
<syntaxhighlight lang="oforth">0 #+ [ 1, 2, 3, 4, 5 ] apply</syntaxhighlight>
 
map regroups all results into a new list :
<syntaxhighlight lang="oforth">#sq [ 1, 2, 3, 4, 5 ] map</syntaxhighlight>
 
=={{header|Ol}}==
Apply custom callback (lambda) to every element of list.
<syntaxhighlight lang="scheme">
(for-each
(lambda (element)
(display element))
'(1 2 3 4 5))
; ==> 12345
</syntaxhighlight>
 
=={{header|ooRexx}}==
ooRexx doesn't directly support callbacks on array items, but this is pretty easy to implement using Routine objects.
<syntaxhighlight lang="oorexx">start = .array~of("Rick", "Mike", "David", "Mark")
new = map(start, .routines~reversit)
call map new, .routines~sayit
 
 
-- a function to perform an iterated callback over an array
-- using the provided function. Returns an array containing
-- each function result
::routine map
use strict arg array, function
resultArray = .array~new(array~items)
do item over array
resultArray~append(function~call(item))
end
return resultArray
 
::routine reversit
use arg string
return string~reverse
 
::routine sayit
use arg string
say string
return .true -- called as a function, so a result is required</syntaxhighlight>
{{out}}
<pre>kciR
ekiM
divaD
kraM</pre>
 
=={{header|Order}}==
Both sequences and tuples support the usual map operation seen in many functional languages. Sequences also support <code>8seq_for_each</code>, and a few variations, which returns <code>8nil</code>.
<syntaxhighlight lang="c">#include <order/interpreter.h>
 
ORDER_PP( 8tuple_map(8fn(8X, 8times(8X, 8X)), 8tuple(1, 2, 3, 4, 5)) )
// -> (1,4,9,16,25)
 
ORDER_PP( 8seq_map(8fn(8X, 8times(8X, 8X)), 8seq(1, 2, 3, 4, 5)) )
// -> (1)(4)(9)(16)(25)
 
ORDER_PP( 8seq_for_each(8fn(8X, 8print(8X 8comma)), 8seq(1, 2, 3, 4, 5)) )
// prints 1,2,3,4,5, and returns 8nil</syntaxhighlight>
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">declare
fun{Square A}
A*A
Line 1,073 ⟶ 2,552:
%% apply a FUNCTION to every element
Result = {Map Lst Square}
{Show Result}</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
{{works with|PARI/GP|2.4.2 and selectabove}}
<langsyntaxhighlight lang="parigp">callback(n)=n+n;
apply(callback, [1,2,3,4,5])</langsyntaxhighlight>
 
This should be contrasted with <code>call</code>:
<syntaxhighlight lang="parigp">call(callback, [1,2,3,4,5])</syntaxhighlight>
which is equivalent to <code>callback(1, 2, 3, 4, 5)</code> rather than <code>[callback(1), callback(2), callback(3), callback(4), callback(5)]</code>.
 
=={{header|Pascal}}==
Line 1,084 ⟶ 2,567:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl"># create array
my @a = (1, 2, 3, 4, 5);
 
Line 1,113 ⟶ 2,596:
 
# filter an array
my @e = grep { $_ % 2 == 0 } @a; # @e is now (2, 4)</langsyntaxhighlight>
 
=={{header|Perl 6Phix}}==
{{libheader|Phix/basics}}
{{works with|Rakudo|#21 "Seattle"}}
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"0.8.2"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">add1</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">apply</span><span style="color: #0000FF;">({</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},</span><span style="color: #000000;">add1</span><span style="color: #0000FF;">)</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
{2,3,4}
</pre>
There are in fact three ways to invoke apply:<br>
The oldest/original, as above, is apply(s,fn), where fn is invoked length(s) times with a single parameter of s[i].<br>
apply(false,fn,s) likewise invokes fn length(s) times, but each time with length(s[i]) parameters.<br>
apply(true,sprintf,{{"%d"},s}), the third way, invokes sprintf length(s) times with two parameters, being "%d" and each s[i].<br>
This last way scans it's third argument looking for a (consistent) longest length to determine how many times to invoke sprintf, <br>
uses the length of it's third argument to determine how many parameters each call will get, and <br>
uses the same value on every call for any atom or length 1 elements, such as that {"%d"}.
 
=={{header|Phixmonti}}==
<lang perl6>my $function = { 2 * $^x + 3 };
<syntaxhighlight lang="phixmonti">/# Rosetta Code problem: http://rosettacode.org/wiki/Apply_a_callback_to_an_array
my @array = 1 .. 5;
by Galileo, 05/2022 #/
 
include ..\Utilitys.pmt
# via map function
.say for map $function, @array;
 
def ++
# via map method
1 +
.say for @array.map($function);
enddef
 
def square
# via for loop
dup *
for @array {
enddef
say $function($_);
}
 
( 1 2 3 ) dup
# via the "hyper" metaoperator and method indirection
 
say @array».$function;</lang>
getid ++ map swap
getid square map
 
pstack</syntaxhighlight>
{{out}}
<pre>
[[2, 3, 4], [1, 4, 9]]
 
=== Press any key to exit ===</pre>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">function cube($n)
{
return($n * $n * $n);
Line 1,143 ⟶ 2,655:
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);</langsyntaxhighlight>
 
=={{header|Picat}}==
Picat doesn't support anonymous (lambda) functions so the function must be defined in the program to be used by - say - map/2.
There are - however - quite a few ways without proper lambdas, using map/2, apply/2, or list comprehensions.
<syntaxhighlight lang="picat">go =>
L = 1..10,
 
% Using map/2 in different ways
println(L.map(fun)),
println(map(L,fun)),
println(map(fun,L)),
 
% List comprehensions
println([fun(I) : I in L]),
 
% Using apply/2
println([apply(fun,I) : I in L]),
 
% And using list comprehension with the function directly.
println([I*I : I in L]),
nl.
 
% Some function
fun(X) = X*X.
</syntaxhighlight>
 
{{trans|Prolog}}
This variant is inspired by the Prolog solution (using assert/1 to define a predicate) and shows the integration with Picat's underlying B-Prolog engine.
 
Picat does not support assert/1 directly, so one have to do the assert/1 in the bp module space (the module/space for the B-Prolog engine). To call the defined predicate, one must prepend the predicate name with "bp.".
 
Note that fun2/2 is not a function so map/2 or apply/2 cannot be used here.
<syntaxhighlight lang="picat">go2 =>
L = 1..10,
 
% Define the predicate _in the bp space_.
bp.assert( $(fun2(X,Y) :- Y is X*X) ),
 
% Use bp.fun2 to call the function.
println([B : A in L, bp.fun2(A,B)]),
nl.
</syntaxhighlight>
 
Using this technique one can do quite much "real" Prolog stuff even though Picat doesn't support it directly. However, one should be careful with this approach since it can sometimes be confusing and it doesn't work in all cases.
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">: (mapc println (1 2 3 4 5)) # Print numbers
1
2
Line 1,161 ⟶ 2,717:
 
: (mapcar if '(T NIL T NIL) '(1 2 3 4) '(5 6 7 8)) # Conditional function
-> (1 6 3 8)</langsyntaxhighlight>
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">int cube(int n)
{
return n*n*n;
Line 1,171 ⟶ 2,727:
array(int) a = ({ 1,2,3,4,5 });
array(int) b = cube(a[*]); // automap operator
array(int) c = map(a, cube); // conventional map function</langsyntaxhighlight>
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i"> declare x(5) initial (1,3,5,7,8);
x = sqrt(x);
x = sin(x);</syntaxhighlight>
 
=={{header|PL/SQL}}==
PL/SQL doesn't have callbacks, though we can pass around an object and use its method to simulate one. Further, this callback method can be defined in an abstract class that the mapping function will expect.
{{works with|Oracle}}
<syntaxhighlight lang="plsql">-- Let's create a generic class with one method to be used as an interface:
<lang plsql>set serveroutput on
create or replace
declare
TYPE callback AS OBJECT (
type myarray is table of number index by binary_integer;
-- A class needs at least one member even though we don't use it
x myarray;
-- There's no generic OBJECT type, so let's call it NUMBER
i pls_integer;
dummy NUMBER,
begin
-- Here's our function, and since PL/SQL doesn't have generics,
-- populate array
-- let's foruse itype inNUMBER for 1..5our loopparams
MEMBER FUNCTION exec(n number) RETURN number
x(i) := i;
) NOT FINAL not instantiable;
end loop;
/
i := x.first;
 
-- square array
-- Now let's inherit from that, defining a class with one method. We'll have ours square a number.
while i is not null loop
-- We can pass this class into any function that takes type callback:
x(i) := x(i)*x(i);
CREATE OR REPLACE TYPE CB_SQUARE under callback (
dbms_output.put_line(x(i));
OVERRIDING MEMBER FUNCTION exec(n NUMBER) RETURN NUMBER
i := x.next(i);
)
end loop;
/
end;
CREATE OR REPLACE
/</lang>
TYPE BODY CB_SQUARE AS
OVERRIDING MEMBER FUNCTION exec(n NUMBER) RETURN NUMBER IS
BEGIN
RETURN n * n;
END exec;
END;
/
 
-- And a package to hold our test
CREATE OR REPLACE
PACKAGE PKG_CALLBACK AS
myCallback cb_square;
TYPE intTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
ints intTable;
i PLS_INTEGER;
procedure test_callback;
END PKG_CALLBACK;
/
 
CREATE OR REPLACE PACKAGE BODY PKG_CALLBACK AS
-- Our generic mapping function that takes a "method" and a collection
-- Note that it takes the generic callback type
-- that doesn't know anything about squaring
procedure do_callback(myCallback IN callback, ints IN OUT intTable) IS
i PLS_INTEGER;
myInt NUMBER;
begin
for i in 1 .. ints.count loop
myInt := ints(i);
-- PL/SQL call's the child's method
ints(i) := myCallback.exec(myInt);
END LOOP;
end do_callback;
 
procedure test_callback IS
BEGIN
myCallback := cb_square(null);
FOR i IN 1..5 LOOP
ints(i) := i;
END LOOP;
do_callback(myCallback, ints);
i := ints.FIRST;
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.put_line(ints(i));
i := ints.next(i);
END LOOP;
END test_callback;
END PKG_CALLBACK;
/
 
BEGIN
PKG_CALLBACK.TEST_CALLBACK();
END;
/</syntaxhighlight>
 
=={{header|Pop11}}==
 
<langsyntaxhighlight lang="pop11">;;; Define a procedure
define proc(x);
printf(x*x, '%p,');
Line 1,206 ⟶ 2,824:
 
;;; Apply procedure to array
appdata(ar, proc);</langsyntaxhighlight>
 
If one wants to create a new array consisting of transformed values then procedure mapdata may be more convenient.
Line 1,212 ⟶ 2,830:
=={{header|PostScript}}==
The <code>forall</code> operator applies a procedure to each element of an array, a packed array or a string.
<langsyntaxhighlight lang="postscript">[1 2 3 4 5] { dup mul = } forall</langsyntaxhighlight>
In this case the respective square numbers for the elements are printed.
 
To create a new array from the results above code can simply be wrapped in <code>[]</code>:
<langsyntaxhighlight lang="postscript">[ [1 2 3 4 5] { dup mul } forall ]</langsyntaxhighlight>
 
{{libheader|initlib}}
<langsyntaxhighlight lang="postscript">
[1 2 3 4 5] {dup *} map
</syntaxhighlight>
</lang>
 
=={{header|PowerShell}}==
This can be done in PowerShell with the <code>ForEach-Object</code> cmdlet which applies a scriptblock to each element of an array:
<langsyntaxhighlight lang="powershell">1..5 | ForEach-Object { $_ * $_ }</langsyntaxhighlight>
To recreate a ''map'' function, found in other languages the same method applies:
<langsyntaxhighlight lang="powershell">function map ([array] $a, [scriptblock] $s) {
$a | ForEach-Object $s
}
}</lang>
map (1..5) { $_ * $_ }</syntaxhighlight>
 
=={{header|Prolog}}==
Prolog doesn't have arrays, but we can do it with lists. This can be done in the console mode.
<langsyntaxhighlight Prologlang="prolog"> ?- assert((fun(X, Y) :- Y is 2 * X)).
true.
 
?- maplist(fun, [1,2,3,4,5], L).
L = [2,4,6,8,10].
</syntaxhighlight>
</lang>
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Procedure Cube(Array param.i(1))
Protected n.i
For n = 0 To ArraySize(param())
Line 1,254 ⟶ 2,873:
Next
 
Cube(AnArray()) </langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">def square(n):
return n * n
Line 1,274 ⟶ 2,893:
 
import itertools
isquares2 = itertools.imap(square, numbers) # iterator, lazy</langsyntaxhighlight>
To print squares of integers in the range from 0 to 9, type:
<langsyntaxhighlight lang="python">print " ".join(str(n * n) for n in range(10))</langsyntaxhighlight>
Or:
<langsyntaxhighlight lang="python">print " ".join(map(str, map(square, range(10))))</langsyntaxhighlight>
Result:
<langsyntaxhighlight lang="python">0 1 4 9 16 25 36 49 64 81</langsyntaxhighlight>
 
=={{header|QB64}}==
<syntaxhighlight lang="qb64">
'Task
'Take a combined set of elements and apply a function to each element.
'UDT
Type Friend
Names As String * 8
Surnames As String * 8
Age As Integer
End Type
 
Dim Friends(1 To 6) As Friend
Restore
FillArray
SearchForAdult Friends(), LBound(friends), UBound(friends)
 
End
 
Data "John","Beoz",13,"Will","Strange",22
Data "Arthur","Boile",16,"Peter","Smith",21
Data "Tom","Parker",14,"Tim","Wesson",24
 
Sub FillArray
Shared Friends() As Friend
Dim indeX As Integer
For indeX = LBound(friends) To UBound(friends) Step 1
Read Friends(indeX).Names, Friends(indeX).Surnames, Friends(indeX).Age
Next
End Sub
 
Sub SearchForAdult (F() As Friend, Min As Integer, Max As Integer)
Dim Index As Integer
Print "Friends with more than 18 years old"
For Index = Min To Max Step 1
If F(Index).Age > 18 Then Print F(Index).Names; " "; F(Index).Surnames; " "; F(Index).Age
Next Index
End Sub
 
</syntaxhighlight>
 
=={{header|Quackery}}==
 
As a dialogue in the Quackery shell (REPL), applying the word <code>cubed</code> to the nest <code>[ 1 2 3 4 5 6 7 8 9 10 ]</code>, first treating the nest as a list, then as an array.
 
<syntaxhighlight lang="quackery">/O> [ 3 ** ] is cubed ( n --> n )
...
 
Stack empty.
 
/O> ' [ 1 2 3 4 5 6 7 8 9 10 ]
... [] swap witheach
... [ cubed join ]
...
 
Stack: [ 1 8 27 64 125 216 343 512 729 1000 ]
 
/O> drop
...
 
Stack empty.
 
/O> ' [ 1 2 3 4 5 6 7 8 9 10 ]
... dup witheach
... [ cubed swap i^ poke ]
...
 
Stack: [ 1 8 27 64 125 216 343 512 729 1000 ]</syntaxhighlight>
 
=={{header|R}}==
Many functions can take advantage of implicit vectorisation, e.g.
<langsyntaxhighlight Rlang="r">cube <- function(x) x*x*x
elements <- 1:5
cubes <- cube(elements)</langsyntaxhighlight>
Explicit looping over array elements is also possible.
<langsyntaxhighlight Rlang="r">cubes <- numeric(5)
for(i in seq_along(cubes))
{
cubes[i] <- cube(elements[i])
}</langsyntaxhighlight>
Loop syntax can often simplified using the [http://stat.ethz.ch/R-manual/R-patched/library/base/html/apply.html *apply] family of functions.
<langsyntaxhighlight Rlang="r">elements2 <- list(1,2,3,4,5)
cubes <- sapply(elements2, cube)</langsyntaxhighlight>
In each case above, the value of 'cubes' is
1 8 27 64 125
 
=={{header|Racket}}==
 
<syntaxhighlight lang="racket">
#lang racket
 
;; using the `for/vector' comprehension form
(for/vector ([i #(1 2 3 4 5)]) (sqr i))
 
;; the usual functional `map'
(vector-map sqr #(1 2 3 4 5))
</syntaxhighlight>
 
=={{header|Raku}}==
(formerly Perl 6)
{{works with|Rakudo|2015.10-11}}
 
<syntaxhighlight lang="raku" line>sub function { 2 * $^x + 3 };
my @array = 1 .. 5;
 
# via map function
.say for map &function, @array;
 
# via map method
.say for @array.map(&function);
 
# via for loop
for @array {
say function($_);
}
 
# via the "hyper" metaoperator and method indirection
say @array».&function;
 
# we neither need a variable for the array nor for the function
say [1,2,3]>>.&({ $^x + 1});
</syntaxhighlight>
 
=={{header|Raven}}==
<langsyntaxhighlight lang="raven"># To print the squared elements
[1 2 3 4 5] each dup * print</langsyntaxhighlight>
 
<langsyntaxhighlight lang="raven"># To obtain a new array
group [1 2 3 4 5] each
dup *
list</langsyntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight REBOLlang="rebol">REBOL [
Title: "Array Callback"
Date: 2010-01-04
Author: oofoe
URL: http://rosettacode.org/wiki/Apply_a_callback_to_an_Array
]
Line 1,336 ⟶ 3,058:
 
print [crlf "Applying native function with 'map':"]
assert [[2 4 6] = map :square-root [4 16 36]]</langsyntaxhighlight>
 
Output:
 
{{Out}}
<pre>Simple loop, modify in place:
ok [[1 100 81] = (a: [1 100 81] forall a [a/1: square a/1] a)]
Line 1,350 ⟶ 3,071:
 
=={{header|Retro}}==
Using the '''array'''' library to multiply each value in an array by 10 and display the results:
 
<lang Retro>[ 1provides 2a 3variety 4of 5array ]words. ^array'fromQuoteUsing [these 10to *multiply ]each ^array'mapvalue in an ^array' by 10 and display</lang> the results:
 
<syntaxhighlight lang="retro">{ #1 #2 #3 #4 #5 } [ #10 * ] a:map [ n:put sp ] a:for-each</syntaxhighlight>
Retro also provides '''^array'apply''' for use when you don't want to alter the contents of the array:
 
=={{header|REXX}}==
<lang Retro>[ "Hello" "World" "Foo" ] ^array'fromQuote [ "%s " puts ] ^array'apply</lang>
<syntaxhighlight lang="rexx">/*REXX program applies a callback to an array (using factorials for a demonstration).*/
numeric digits 100 /*be able to display some huge numbers.*/
parse arg # . /*obtain an optional value from the CL.*/
a.= /*initialize the array A to all nulls*/
if #=='' | #=="," then #= 12 /*Not assigned? Then use default value*/
do j=0 to #; a.j= j /*assign the integer J ───► A.j */
end /*j*/ /*array A will have N values: 0 ──► #*/
 
call listA 'before callback' /*display A array before the callback*/
say /*display a blank line for readability.*/
say ' ··· applying callback to array A ···' /*display what is about to happen to B.*/
say /*display a blank line for readability.*/
call bangit 'a' /*factorialize (the values) of A array.*/
/* store the results ───► array B.*/
call listA ' after callback' /*display A array after the callback.*/
exit 0 /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
bangit: do v=0; $= value(arg(1)'.'v); if $=='' then return /*No value? Then return*/
call value arg(1)'.'v, fact($) /*assign a value (a factorial) to array*/
end /*i*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
fact: procedure; arg x; != 1; do f=2 to x; != !*f; end; /*f*/; return !
listA: do k=0 while a.k\==''; say arg(1) 'a.'k"=" a.k; end /*k*/; return</syntaxhighlight>
{{out|output|text=&nbsp; when using the default input:}}
<pre>
before callback a.0= 0
before callback a.1= 1
before callback a.2= 2
before callback a.3= 3
before callback a.4= 4
before callback a.5= 5
before callback a.6= 6
before callback a.7= 7
before callback a.8= 8
before callback a.9= 9
before callback a.10= 10
before callback a.11= 11
before callback a.12= 12
 
··· applying callback to array A ···
 
after callback a.0= 1
after callback a.1= 1
after callback a.2= 2
after callback a.3= 6
after callback a.4= 24
after callback a.5= 120
after callback a.6= 720
after callback a.7= 5040
after callback a.8= 40320
after callback a.9= 362880
after callback a.10= 3628800
after callback a.11= 39916800
after callback a.12= 479001600
</pre>
 
=={{header|Ring}}==
<syntaxhighlight lang="ring">
for x in [1,2,3,4,5]
x = x*x
next
</syntaxhighlight>
 
=={{header|RLaB}}==
Line 1,372 ⟶ 3,154:
Consider an example:
 
<syntaxhighlight lang="rlab">
<lang RLaB>
>> x = rand(2,4)
0.707213207 0.275298961 0.396757763 0.232312312
Line 1,379 ⟶ 3,161:
0.649717845 0.271834652 0.386430003 0.230228332
0.213952984 0.205601224 0.536006923 0.617916954
</syntaxhighlight>
</lang>
 
This can be done on entry-by-entry basis, but one has to keep in mind that the
'for' or 'while' loops are slow in interpreted languages, and RLaB is no exception.
 
<syntaxhighlight lang="rlab">
<lang RLaB>
x = rand(2,4);
y = zeros(2,4);
Line 1,394 ⟶ 3,176:
}
}
</syntaxhighlight>
</lang>
 
 
Line 1,401 ⟶ 3,183:
function 'members' which returns a string vector with the names of the elements of the list.
 
<syntaxhighlight lang="rlab">
<lang RLaB>
x = <<>>;
for (i in 1:9)
Line 1,413 ⟶ 3,195:
y.[i] = sin( x.[i] );
}
</syntaxhighlight>
</lang>
 
=={{header|RPL}}==
{{works with|Halcyon Calc|4.2.7}}
≪ → array func
≪ array 0 CON
1 array SIZE FOR j
j array j GET func EVAL PUT
NEXT
≫ ≫
´MAP’ STO
 
[1,2,3,4,5,6,7,8,9] ≪ SQ ≫ MAP
=={{header|REXX}}==
{{out}}
<lang rexx>
<pre>
a.=''; b.=''
1: [ 1 4 9 16 25 36 49 64 81 ]
a.0= 0
</pre>
a.1= 1
a.2= 2
a.3= 3
a.4= 4
a.5= 5
a.6= 6
a.7= 7
a.8= 8
a.9= 9
a.10=10
 
=={{header|Ruby}}==
call listab 'before'
You could use a traditional "for i in arr" approach like below:
call bangit 'a','b' /*factorialize the A array, store results in B */
<syntaxhighlight lang="ruby">for i in [1,2,3,4,5] do
call listab ' after'
puts i**2
exit
end</syntaxhighlight>
 
Or you could the more preferred ruby way of an iterator (which is borrowed from SmallTalk)
/*─────────────────────────────────────BANGIT subroutine────────────────*/
<syntaxhighlight lang="ruby">[1,2,3,4,5].each{ |i| puts i**2 }</syntaxhighlight>
bangit: do j=0
_=value(arg(1)'.'j); if _=='' then return
call value arg(2)'.'j,fact(_)
end
 
To create a new array of each value squared
/*─────────────────────────────────────FACT subroutine──────────────────*/
<syntaxhighlight lang="ruby">[1,2,3,4,5].map{ |i| i**2 }</syntaxhighlight>
fact: procedure; !=1; do j=2 to arg(1); !=!*j; end; return !
 
=={{header|Rust}}==
 
<syntaxhighlight lang="rust">fn echo(n: &i32) {
/*─────────────────────────────────────LISTAB subroutine────────────────*/
println!("{}", n);
listab: do j=0 while a.j\==''
}
say arg(1) 'a.'j"="a.j
end
say
do j=0 while b.j\==''
say arg(1) 'b.'j"="b.j
end
return
</lang>
Output:
<pre style="height:30ex;overflow:scroll">
before a.0=0
before a.1=1
before a.2=2
before a.3=3
before a.4=4
before a.5=5
before a.6=6
before a.7=7
before a.8=8
before a.9=9
before a.10=10
 
fn main() {
after a.0=0
let a: [i32; 5];
after a.1=1
a = [1, 2, 3, 4, 5];
after a.2=2
let _: Vec<_> = a.into_iter().map(echo).collect();
after a.3=3
}</syntaxhighlight>
after a.4=4
after a.5=5
after a.6=6
after a.7=7
after a.8=8
after a.9=9
after a.10=10
 
=={{header|Salmon}}==
after b.0=1
after b.1=1
after b.2=2
after b.3=6
after b.4=24
after b.5=120
after b.6=720
after b.7=5040
after b.8=40320
after b.9=362880
after b.10=3628800
</pre>
 
These examples apply the square function to a list of the numbers from 0 through 9 to produce a new list of their squares, then iterate over the resulting list and print the squares.
=={{header|Ruby}}==
You could use a traditional "for i in arr" approach like below:
<lang ruby>for i in [1,2,3,4,5] do
puts i**2
end</lang>
 
<syntaxhighlight lang="salmon">function apply(list, ageless to_apply)
Or you could the more preferred ruby way of an iterator (which is borrowed from SmallTalk)
(comprehend(x; list) (to_apply(x)));
<lang ruby>[1,2,3,4,5].each{ |i| puts i**2 }</lang>
 
function square(x) (x*x);
To create a new array of each value squared
 
<lang ruby>[1,2,3,4,5].map{ |i| i**2 }</lang>
iterate(x; apply([0...9], square))
x!;</syntaxhighlight>
 
With short identifiers:
 
<syntaxhighlight lang="salmon">include "short.salm";
 
fun apply(list, ageless to_apply)
(comp(x; list) (to_apply(x)));
 
fun square(x) (x*x);
 
iter(x; apply([0...9], square))
x!;</syntaxhighlight>
 
With the numbers given as a list of individual elements:
 
<syntaxhighlight lang="salmon">function apply(list, to_apply)
(comprehend(x; list) (to_apply(x)));
 
function square(x) (x*x);
 
iterate(x; apply([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], square))
x!;</syntaxhighlight>
 
=={{header|Sather}}==
<langsyntaxhighlight lang="sather">class MAIN is
do_something(i:INT):INT is
return i * i;
Line 1,519 ⟶ 3,283:
loop #OUT + a.elt! + "\n"; end;
end;
end;</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">val l = List(1,2,3,4)
l.foreach {i => println(i)}</langsyntaxhighlight>
 
When the argument appears only once -as here, i appears only one in println(i) - it may be shortened to
<syntaxhighlight lang ="scala">l.foreach(println(_))</langsyntaxhighlight>
Same for an array
<langsyntaxhighlight lang="scala">val a = Array(1,2,3,4)
a.foreach {i => println(i)}
a.foreach(println(_)) '' // same as previous line''</langsyntaxhighlight>
 
Or for an externally defined function:
<langsyntaxhighlight lang="scala">def doSomething(in: int) = {println("Doing something with "+in)}
l.foreach(doSomething)</langsyntaxhighlight>
 
There is also a ''for'' syntax, which is internally rewritten to call foreach. A foreach method must be defined on ''a''
<langsyntaxhighlight lang="scala">for(val i <- a) println(i)</langsyntaxhighlight>
 
It is also possible to apply a function on each item of an list to get a new list (same on array and most collections)
<langsyntaxhighlight lang="scala">val squares = l.map{i => i * i} ''//squares is'' List(1,4,9,16)</langsyntaxhighlight>
 
Or the equivalent ''for'' syntax, with the additional keyword ''yield'', map is called instead of foreach
<langsyntaxhighlight lang="scala">val squares = for (val i <- l) yield i * i</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">(define (square n) (* n n))
(define x #(1 2 3 4 5))
(map square (vector->list x))</langsyntaxhighlight>
 
A single-line variation
<langsyntaxhighlight lang="scheme">(map (lambda (n) (* n n)) '(1 2 3 4 5))</langsyntaxhighlight>
 
For completeness, the <tt>map</tt> function (which is R5RS standard) can be coded as follows:
<langsyntaxhighlight lang="scheme">(define (map f L)
(if (null? L)
L
(cons (f (car L)) (map f (cdr L)))))</langsyntaxhighlight>
 
=={{header|SenseTalk}}==
<syntaxhighlight lang="sensetalk">
put each item in [1,2,3,5,9,14,24] squared
 
put myFunc of each for each item of [1,2,3,5,9,14,24]
 
to handle myFunc of num
return 2*num + 1
end myFunc</syntaxhighlight>
Output:
<syntaxhighlight lang="sensetalk">(1,4,9,25,81,196,576)
(3,5,7,11,19,29,49)</syntaxhighlight>
 
=={{header|Sidef}}==
Defining a callback function:
<syntaxhighlight lang="ruby">func callback(i) { say i**2 }</syntaxhighlight>
 
The function will get called for each element:
<syntaxhighlight lang="ruby">[1,2,3,4].each(callback)</syntaxhighlight>
 
Same as above, but with the function inlined:
<syntaxhighlight lang="ruby">[1,2,3,4].each{|i| say i**2 }</syntaxhighlight>
 
For creating a new array, we can use the Array.map method:
<syntaxhighlight lang="ruby">[1,2,3,4,5].map{|i| i**2 }</syntaxhighlight>
 
=={{header|Simula}}==
<syntaxhighlight lang="simula">BEGIN
 
! APPLIES A CALLBACK FUNCTION TO AN ARRAY ;
PROCEDURE APPLY(ARR, FUN);
REAL ARRAY ARR;
PROCEDURE FUN IS REAL PROCEDURE FUN(X); REAL X;;
BEGIN
INTEGER I;
FOR I := LOWERBOUND(ARR, 1) STEP 1 UNTIL UPPERBOUND(ARR, 1) DO
ARR(I) := FUN(ARR(I));
END APPLY;
 
! CALLBACK ;
REAL PROCEDURE SQUARE(X); REAL X; SQUARE := X * X;
 
REAL ARRAY A(1:5);
INTEGER I;
FOR I := 1 STEP 1 UNTIL 5 DO A(I) := I;
APPLY(A, SQUARE);
FOR I := 1 STEP 1 UNTIL 5 DO OUTFIX(A(I), 2, 8); OUTIMAGE;
 
END.</syntaxhighlight>
{{out}}
<pre>
1.00 4.00 9.00 16.00 25.00
</pre>
 
=={{header|Slate}}==
<langsyntaxhighlight lang="slate">#( 1 2 3 4 5 ) collect: [| :n | n * n].</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang="smalltalk">#( 1 2.0 3 4 5 'three') collectdo: [:neach | neach * ndisplayNl].</langsyntaxhighlight>
You can tell symbols how to react to the <tt>value:</tt> message, and then write &sup2;:
<syntaxhighlight lang="smalltalk">#( 1 2.0 'three') do: #displayNl.</syntaxhighlight>
2) actually most dialects already have it, and it is trivial to add, if it does not.
 
There is a huge number of additional enumeration messages implemented in Collection, from which Array inherits. Eg.:
<syntaxhighlight lang="smalltalk">#( 1 2 3 4 5 ) collect: [:n | n * n].</syntaxhighlight>
 
=={{header|Sparkling}}==
The <tt>foreach</tt> function calls the supplied callback on each element of the (possibly associative) array, passing it each key and the corresponding value:
<syntaxhighlight lang="sparkling">let numbers = { 1, 2, 3, 4 };
foreach(numbers, function(idx, num) {
print(num);
});</syntaxhighlight>
 
The <tt>map</tt> function applies the transform to each key-value pair and constructs a new array, of which the keys are the keys of the original array, and the corresponding values are the return values of each call to the transform function:
<syntaxhighlight lang="sparkling">let dict = { "foo": 42, "bar": 13, "baz": 37 };
let doubled = map(dict, function(key, val) {
return val * 2;
});</syntaxhighlight>
 
=={{header|SQL PL}}==
{{works with|Db2 LUW}} version 9.7 or higher.
With SQL PL:
<syntaxhighlight lang="sql pl">
--#SET TERMINATOR @
 
SET SERVEROUTPUT ON @
 
BEGIN
DECLARE TYPE NUMBERS AS SMALLINT ARRAY[5];
DECLARE NUMBERS NUMBERS;
DECLARE I SMALLINT;
 
SET I = 1;
WHILE (I <= 5) DO
SET NUMBERS[I] = I;
SET I = I + 1;
END WHILE;
 
BEGIN
DECLARE PROCEDURE PRINT_SQUARE (
IN VALUE SMALLINT
)
BEGIN
CALL DBMS_OUTPUT.PUT(VALUE * VALUE || ' ');
END;
 
SET I = 1;
WHILE (I <= 5) DO
CALL PRINT_SQUARE(NUMBERS[I]);
SET I = I + 1;
END WHILE;
CALL DBMS_OUTPUT.PUT_LINE('');
END;
END @
</syntaxhighlight>
Output:
<pre>
db2 -td@
db2 => BEGIN
...
db2 (cont.) => END @
DB20000I The SQL command completed successfully.
 
1 4 9 16 25
</pre>
 
=={{header|Standard ML}}==
<syntaxhighlight lang="standard ml">
<lang Standard ML>
map f l
</syntaxhighlight>
</lang>
i.e.
<syntaxhighlight lang="standard ml">
<lang Standard ML>
map (fn x=>x+1) [1,2,3];; (* [2,3,4] *)
</syntaxhighlight>
</lang>
 
=={{header|Stata}}==
There is no 'map' function in Mata, but it's easy to implement. Notice that you can only pass functions that are written in Mata, no builtin ones. For instance, the trigonometric functions (cos, sin) or the exponential are builtin. To pass a builtin function to another function, one needs to write a wrapper in Mata. See also Stata help about '''[https://www.stata.com/help.cgi?m2_pointers pointers]''' and '''[https://www.stata.com/help.cgi?m2_ftof passing functions to functions]'''. There are two versions of the function: one to return a numeric array, another to return a string array.
 
<syntaxhighlight lang="stata">function map(f,a) {
nr = rows(a)
nc = cols(a)
b = J(nr,nc,.)
for (i=1;i<=nr;i++) {
for (j=1;j<=nc;j++) b[i,j] = (*f)(a[i,j])
}
return(b)
}
 
function maps(f,a) {
nr = rows(a)
nc = cols(a)
b = J(nr,nc,"")
for (i=1;i<=nr;i++) {
for (j=1;j<=nc;j++) b[i,j] = (*f)(a[i,j])
}
return(b)
}
 
function square(x) {
return(x*x)
}</syntaxhighlight>
 
'''Output'''
 
<pre>: map(&square(),(1,2,3\4,5,6))
1 2 3
+----------------+
1 | 1 4 9 |
2 | 16 25 36 |
+----------------+</pre>
 
=={{header|SuperCollider}}==
Actually, there is a builtin <tt>squared</tt> operator:
<syntaxhighlight lang="supercollider">[1, 2, 3].squared // returns [1, 4, 9]</syntaxhighlight>
Anything that is a <tt>Collection</tt> can be used with <tt>collect</tt>:
<syntaxhighlight lang="supercollider">[1, 2, 3].collect { |x| x * x }</syntaxhighlight>
[[List Comprehension#SuperCollider|List comprehension]] combined with a higher-order function can also be used:
<syntaxhighlight lang="supercollider">var square = { |x| x * x };
var map = { |fn, xs|
all {: fn.value(x), x <- xs };
};
map.value(square, [1, 2, 3]);</syntaxhighlight>
 
=={{header|Swift}}==
<syntaxhighlight lang="swift">func square(n: Int) -> Int {
return n * n
}
 
let numbers = [1, 3, 5, 7]
 
let squares1a = numbers.map(square) // map method on array
 
let squares1b = numbers.map {x in x*x} // map method on array with anonymous function
 
let squares1b = numbers.map { $0 * $0 } // map method on array with anonymous function and unnamed parameters
 
let isquares1 = numbers.lazy.map(square) // lazy sequence</syntaxhighlight>
 
=={{header|Tailspin}}==
<syntaxhighlight lang="tailspin">
def numbers: [1,3,7,10];
 
templates cube
$ * $ * $ !
end cube
 
// Using inline array templates (which also allows access to index by $i)
$numbers -> \[i]($ * $i !\) -> !OUT::write
$numbers -> \[i]($ * $ !\) -> !OUT::write
$numbers -> \[i]($ -> cube !\) -> !OUT::write
 
// Using array literal and deconstructor
[ $numbers... -> $ * $ ] -> !OUT::write
[ $numbers... -> cube ] -> !OUT::write
</syntaxhighlight>
 
=={{header|Tcl}}==
 
If I wanted to call "<tt>myfunc</tt>" on each element of <tt>dat</tt> and <tt>dat</tt> were a list:
<langsyntaxhighlight lang="tcl">foreach var $dat {
myfunc $var
}</langsyntaxhighlight>
This does not retain any of the values returned by <tt>myfunc</tt>.
 
if <tt>dat</tt> were an (associative) array, however:
<langsyntaxhighlight lang="tcl">foreach name [array names dat] {
myfunc $dat($name)
}</langsyntaxhighlight>
 
More functional, with a simple <code>map</code> function:
<langsyntaxhighlight Tcllang="tcl">proc map {f list} {
set res {}
foreach e $list {lappend res [$f $e]}
Line 1,596 ⟶ 3,561:
 
% map square {1 2 3 4 5}
1 4 9 16 25</langsyntaxhighlight>
 
=={{header|TI-89 BASIC}}==
 
<langsyntaxhighlight lang="ti89b">© For no return value
Define foreach(fe_cname,fe_list) = Prgm
Local fe_i
Line 1,616 ⟶ 3,581:
 
foreach("callback", {1,2,3,4,5})
Disp map("√", {1,2,3,4,5})</langsyntaxhighlight>
 
Output:
 
{{Out}}
<math>1</math><br>
<math>2</math><br>
Line 1,626 ⟶ 3,590:
<math>5</math><br>
<math>\begin{Bmatrix}1 & \sqrt{2} & \sqrt{3} & 2 & \sqrt{5}\end{Bmatrix}</math>
 
=={{header|TIScript}}==
 
JavaScript alike:
 
<syntaxhighlight lang="javascript">var a = [1, 2, 3, 4, 5];
a.map(function(v) { return v * v; })
</syntaxhighlight>
 
Using short form of lambda notation:
<syntaxhighlight lang="javascript">var a = [1, 2, 3, 4, 5];
a.map( :v: v*v );
</syntaxhighlight>
 
=={{header|Toka}}==
 
<langsyntaxhighlight lang="toka">( array count function -- )
{
value| array fn |
Line 1,645 ⟶ 3,622:
 
( Add 1 to each item in the array )
a 5 [ 1 + ] map-array</langsyntaxhighlight>
 
=={{header|TorqueScript}}==
 
--[[User:Elm|Elm]] 03:41, 18 June 2012 (UTC)
 
Callbacks:
 
<syntaxhighlight lang="torquescript">
function map(%array,%arrayCount,%function)
{
for(%i=0;%i<%arrayCount;%i++)
{
eval("%a = "@%array@"["@%i@"];");
eval(""@%function@"("@%a@");");
}
}
</syntaxhighlight>
 
Now to set up an array:
 
<syntaxhighlight lang="torquescript">
$array[0] = "Hello.";
$array[1] = "Hi.";
$array[2] = "How are you?";
</syntaxhighlight>
 
Now to call the function correctly:
 
<syntaxhighlight lang="torquescript">
map("$array",3,"echo");
</syntaxhighlight>
 
Which should result in:
 
<syntaxhighlight lang="torquescript">
=> Hello.
 
=> Hi.
 
=> How are you?
</syntaxhighlight>
 
=={{header|TXR}}==
 
Print 1 through 10 out of a vector, using <code>prinl</code> the callback, right from the system shell command prompt:
 
<syntaxhighlight lang="bash">$ txr -e '[mapdo prinl #(1 2 3 4 5 6 7 8 9 10)]'
1
2
3
4
5
6
7
8
9
10</syntaxhighlight>
 
<code>mapdo</code> is like <code>mapcar</code> but doesn't accumulate a list, suitable for imperative programming situations when the function is invoked to perform a side effect.
 
TXR extends Lisp list processing primitives to work with vectors and strings also, which is why <code>mapdo</code> cheerfully traverses a vector.
 
=={{header|uBasic/4tH}}==
We cannot transfer the array address, since uBasic/4tH has only got one, but we can transfer the function pointer and size.
<syntaxhighlight lang="text">S = 5 ' Size of the array
 
For x = 0 To S - 1 ' Initialize array
@(x) = x + 1
Next
 
Proc _MapArray (_SquareRoot, S) ' Call mapping procedure
 
For x = 0 To S - 1 ' Print results
Print "SQRT(";x+1;") = ";Using "#.####";@(x)
Next
 
For x = 0 To S - 1 ' Reinitialize array
@(x) = x + 1
Next
 
Proc _MapArray (_Cosine, S) ' Call mapping procedure
 
Print : For x = 0 To S - 1 ' Print results
Print "COS(";x+1;") = ";Using "#.####";@(x)
Next
 
End
 
 
_MapArray Param(2) ' Param(1) = function
Local (1) ' Param(2) = array size
 
For c@ = 0 To b@ - 1
@(c@) = FUNC(a@(@(c@)))
Next
Return
 
 
_SquareRoot Param (1) ' This is an integer SQR subroutine
Local (2)
 
b@ = (10^(4*2)) * a@ ' Output is scaled by 10^4
a@ = b@
 
Do
c@ = (a@ + (b@ / a@))/2
Until (Abs(a@ - c@) < 2)
a@ = c@
Loop
 
Return (c@)
 
 
_Cosine Param(1) ' This is an integer COS subroutine
Push Abs((a@*10000)%62832) ' Output is scaled by 10^4
If Tos()>31416 Then Push 62832-Pop()
Let a@=Tos()>15708
If a@ Then Push 31416-Pop()
Push Tos()
Push (Pop()*Pop())/10000
Push 10000+((10000*-(Tos()/56))/10000)
Push 10000+((Pop()*-(Tos()/30))/10000)
Push 10000+((Pop()*-(Tos()/12))/10000)
Push 10000+((Pop()*-(Pop()/2))/10000)
If a@ Then Push -Pop() ' Result is directly transferred
Return ' through the stack</syntaxhighlight>
{{out}}
<pre>SQRT(1) = 1.0000
SQRT(2) = 1.4142
SQRT(3) = 1.7320
SQRT(4) = 2.0000
SQRT(5) = 2.2360
 
COS(1) = 0.5403
COS(2) = -0.4162
COS(3) = -0.9901
COS(4) = -0.6537
COS(5) = 0.2837
 
0 OK, 0:514</pre>
 
=={{header|UNIX Shell}}==
{{works with|Bourne Shell}}
<langsyntaxhighlight lang="bash">map() {
map_command=$1
shift
Line 1,655 ⟶ 3,772:
}
list=1:2:3
(IFS=:; map echo $list)</langsyntaxhighlight>
 
{{works with|ksh93}}
{{works with|pdksh}}
{{works with|zsh}}
<langsyntaxhighlight lang="bash">map() {
typeset command=$1
shift
Line 1,666 ⟶ 3,783:
}
set -A ary 1 2 3
map print "${ary[@]}"</langsyntaxhighlight>
 
{{works with|zsh}}
<langsyntaxhighlight lang="bash">map(){for i ($*[2,-1]) $1 $i}
a=(1 2 3)
map print $a</langsyntaxhighlight>
 
=={{header|Ursala}}==
The * is a built-in map operator.
This example shows a map of the successor function over a list of natural numbers.
<langsyntaxhighlight Ursalalang="ursala">#import nat
 
#cast %nL
 
demo = successor* <325,32,67,1,3,7,315></langsyntaxhighlight>
{{Out}}
output:
<pre>
<326,33,68,2,4,8,316>
Line 1,688 ⟶ 3,805:
=={{header|V}}==
apply squaring (dup *) to each member of collection
<langsyntaxhighlight lang="v">[1 2 3 4] [dup *] map</langsyntaxhighlight>
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">
Option Explicit
 
Sub Main()
Dim arr, i
'init
arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 
'Loop and apply a function (Fibonacci) to each element
For i = LBound(arr) To UBound(arr): arr(i) = Fibonacci(arr(i)): Next
'return
Debug.Print Join(arr, ", ")
End Sub
 
Private Function Fibonacci(N) As Variant
If N <= 1 Then
Fibonacci = N
Else
Fibonacci = Fibonacci(N - 1) + Fibonacci(N - 2)
End If
End Function</syntaxhighlight>
{{out}}
<pre>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55</pre>
 
=={{header|VBScript}}==
I really have my doubts as to whether this really counts as a callback. I used the same thing in the solution to Amb.
I used the same thing in the solution to Amb.
 
=====Implementation=====
<syntaxhighlight lang="vb">
<lang vb>
class callback
dim sRule
Line 1,711 ⟶ 3,855:
end function
end class
</syntaxhighlight>
</lang>
 
=====Invocation=====
<syntaxhighlight lang="vb">
<lang vb>
dim a1
dim cb
Line 1,728 ⟶ 3,872:
cb.applyto a1
wscript.echo join( a1, ", " )
</syntaxhighlight>
 
{{Out}}
</lang>
 
=====Output=====
<pre>
MY DOG HAS FLEAS
1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489, 10000000000
</pre>
 
=={{header|Vim Script}}==
<code>map()</code> works with lists and dictionaries.
The second argument is an expression string where <code>v:val</code> is replaced by the current value and <code>v:key</code> by the current key (for lists the key is the index).
The result of evaluating the string will be the new value.
The list/dictionary is modified in place.
<syntaxhighlight lang="vim">echo map([10, 20, 30], 'v:val * v:val')
echo map([10, 20, 30], '"Element " . v:key . " = " . v:val')
echo map({"a": "foo", "b": "Bar", "c": "BaZ"}, 'toupper(v:val)')
echo map({"a": "foo", "b": "Bar", "c": "BaZ"}, 'toupper(v:key)')</syntaxhighlight>
 
{{Out}}
<pre>[100, 400, 900]
['Element 0 = 10', 'Element 1 = 20', 'Element 2 = 30']
{'a': 'FOO', 'b': 'BAR', 'c': 'BAZ'}
{'a': 'A', 'b': 'B', 'c': 'C'}</pre>
 
=={{header|Visual Basic .NET}}==
'''Compiler:''' >= Visual Studio 2008
 
The .NET framework has got us covered.
System.Array.ForEach(T(), Action(Of T)) maps a non-value-returning callback,
 
System.Linq.Enumerable.Select(Of TSource,TResult)(IEnumerable(Of TSource), Func(Of TSource, TResult)) provides a way to lazily map a function, resulting in an IEnumerable(Of T),
 
and System.Linq.Enumerable.ToArray(Of TSource)(IEnumerable(Of TSource)) eagerly converts the enumerable to an array.
 
<syntaxhighlight lang="vbnet">Module Program
Function OneMoreThan(i As Integer) As Integer
Return i + 1
End Function
 
Sub Main()
Dim source As Integer() = {1, 2, 3}
 
' Create a delegate from an existing method.
Dim resultEnumerable1 = source.Select(AddressOf OneMoreThan)
 
' The above is just syntax sugar for this; extension methods can be called as if they were instance methods of the first parameter.
resultEnumerable1 = Enumerable.Select(source, AddressOf OneMoreThan)
 
' Or use an anonymous delegate.
Dim resultEnumerable2 = source.Select(Function(i) i + 1)
 
' The sequences are the same.
Console.WriteLine(Enumerable.SequenceEqual(resultEnumerable1, resultEnumerable2))
 
Dim resultArr As Integer() = resultEnumerable1.ToArray()
 
Array.ForEach(resultArr, AddressOf Console.WriteLine)
End Sub
End Module</syntaxhighlight>
 
{{out}}
<pre>True
2
3
4</pre>
 
=={{header|Vorpal}}==
Given and array, A, and a function, F, mapping F over the elements of A is simple:
<syntaxhighlight lang ="vorpal">A.map(F)</langsyntaxhighlight>
If F takes 2 arguments, x and , then simply pass them to map. They will be passed to F when as it is applied to each element of A.
They will be passed to F when as it is applied to each element of A.
<lang vorpal>A.map(F, x, y)</lang>
<syntaxhighlight lang="vorpal">A.map(F, x, y)</syntaxhighlight>
 
=={{header|Wart}}==
<syntaxhighlight lang="wart">map prn '(1 2 3 4 5)</syntaxhighlight>
 
{{Out}}
<pre>1
2
3
4
5</pre>
 
=={{header|WDTE}}==
<syntaxhighlight lang="wdte">let a => import 'arrays';
let s => import 'stream';
 
let example => [3; 5; 2];
 
let double => a.stream example
-> s.map (* 2)
-> s.collect
;</syntaxhighlight>
 
In WDTE, mapping can be accomplished using the <code>stream</code> module. Streams are essentially lazy iterators. The <code>arrays</code> module provides a function for creating a stream from an array, and then the <code>stream</code> module's functions can be used to perform a map operation. <code>collect</code> runs the iteration, collecting the elements yielded in a new array.
 
=={{header|Wren}}==
<syntaxhighlight lang="wren">var arr = [1, 2, 3, 4, 5]
arr = arr.map { |x| x * 2 }.toList
arr = arr.map(Fn.new { |x| x / 2 }).toList
arr.each { |x| System.print(x) }</syntaxhighlight>
 
{{out}}
<pre>
1
2
3
4
5
</pre>
 
=={{header|XBS}}==
<syntaxhighlight lang="xbs">func map(arr:array,callback:function){
set newArr:array = [];
foreach(k,v as arr){
newArr[k]=callback(v,k,arr);
}
send newArr;
}
set arr:array = [1,2,3,4,5];
set result:array = map(arr,func(v){
send v*2;
});
log(arr.join(", "));
log(result.join(", "));</syntaxhighlight>
{{out}}
<pre>
1, 2, 3, 4, 5
2, 4, 6, 8, 10
</pre>
 
=={{header|Yabasic}}==
<syntaxhighlight lang="yabasic">sub map(f$, t())
local i
 
for i = 1 to arraysize(t(), 1)
t(i) = execute(f$, t(i))
next i
end sub
 
sub add1(x)
return x + 1
end sub
 
sub square(x)
return x * x
end sub
 
dim t(10)
 
for i = 1 to 10
t(i) = i
print t(i), "\t";
next i
print
 
//map("add1", t())
map("square", t())
 
for i = 1 to 10
print t(i), "\t";
next i
print</syntaxhighlight>
 
=={{header|Yacas}}==
<syntaxhighlight lang="yacas">Sin /@ {1, 2, 3, 4}
 
MapSingle(Sin, {1,2,3,4})
 
MapSingle({{x}, x^2}, {1,2,3,4})
</syntaxhighlight>
 
=={{header|Z80 Assembly}}==
<syntaxhighlight lang="z80">Array:
byte &01,&02,&03,&04,&05
Array_End:
 
foo:
ld hl,Array
ld b,Array_End-Array ;ld b,5
 
bar:
inc (hl)
inc (hl)
inc (hl)
inc hl ;next entry in array
djnz bar</syntaxhighlight>
 
{{out}}
The program above doesn't show the new values but here they are:
<pre>
&04,&05,&06,&07,&08
</pre>
 
=={{header|Zig}}==
<syntaxhighlight lang="zig">pub fn main() !void {
var array = [_]i32{1, 2, 3};
apply(@TypeOf(array[0]), array[0..], func);
}
 
fn apply(comptime T: type, a: []T, f: fn(T) void) void {
for (a) |item| {
f(item);
}
}
 
fn func(a: i32) void {
const std = @import("std");
std.debug.print("{d}\n", .{a-1});
}</syntaxhighlight>
 
=={{header|zkl}}==
<syntaxhighlight lang="zkl">L(1,2,3,4,5).apply('+(5))</syntaxhighlight>
{{Out}}
<pre>
L(6,7,8,9,10)
</pre>
 
=={{header|zonnon}}==
<syntaxhighlight lang="zonnon">
module Main;
type
Callback = procedure (integer): integer;
Vector = array {math} * of integer;
 
procedure Power(i:integer):integer;
begin
return i*i;
end Power;
 
procedure Map(x: Vector;p: Callback): Vector;
var
i: integer;
r: Vector;
begin
r := new Vector(len(x));
for i := 0 to len(x) - 1 do
r[i] := p(i);
end;
return r
end Map;
 
procedure Write(x: Vector);
var
i: integer;
begin
for i := 0 to len(x) - 1 do
write(x[i]:4)
end;
writeln
end Write;
 
var
x,y: Vector;
 
begin
x := [1,2,3,4,5];
Write(Map(x,Power))
end Main.
</syntaxhighlight>
{{Out}}
<pre>
0 1 4 9 16
</pre>
 
=={{header|ZX Spectrum Basic}}==
<syntaxhighlight lang="zxbasic">10 LET a$="x+x"
20 LET b$="x*x"
30 LET c$="x+x^2"
40 LET f$=c$: REM Assign a$, b$ or c$
150 FOR i=1 TO 5
160 READ x
170 PRINT x;" = ";VAL f$
180 NEXT i
190 STOP
200 DATA 2,5,6,10,100
</syntaxhighlight>
 
{{omit from|gnuplot}}
885

edits