Apply a callback to an array
nexium online cheap zyban buy soma buy cyclobenzaprine xenical online free nextel ringtones ultram online cheap carisoprodol free motorola ringtones free mtv ringtones free alltel ringtones free wwe ringtones cheap celexa zoloft online cheap diazepam tracfone ringtones free music ringtones buy pharmacy online viagra online hydrocodone online order norco free verizon ringtones cheap carisoprodol free alltel ringtones xanax online cheap soma cheap propecia paxil online rivotril online hoodia free sony ericsson ringtones flexeril online lorazepam online alprazolam online cheap carisoprodol free qwest ringtones cheap tenuate lortab online free kyocera ringtones cheap sildenafil order vicodin buy alprazolam free sharp ringtones punk ringtones but vigrx meridia free qwest ringtones nextel ringtones buy cyclobenzaprine free jazz ringtones buy zyban cialis online buy diazepam diethylpropion online kyocera ringtones cheap zanaflex ultram online cheap ambien mp3 ringtones music ringtones zoloft online cheap lortab xanax online vigrx online albuterol online free kyocera ringtones free mono ringtones cheap lipitor buy propecia buy xanax propecia online ericsson ringtones ortho online hgh online free tracfone ringtones cheap clomid buy tramadol vigrx online free motorola ringtones free real ringtones cheap meridia ortho online polyphonic ringtones ultracet online nextel ringtones lisinopril online free sony ericsson ringtones sony ericsson ringtones free alltel ringtones nokia ringtones cheap cialis viagra online real ringtones celexa online cheap valium nokia ringtones cheap levitra nokia ringtones nexium online free cingular ringtones polyphonic ringtones buy diethylpropion tenuate online cheap cialis free jazz ringtones free online pharmacy but phentermine free motorola ringtones cheap levitra mono ringtones zyban online free samsung ringtones free mp3 ringtones soma online ultram online cheap ambien vicodin online vicodin online free funny ringtones zanaflex buy albuterol nexium online propecia online but ambien nokia ringtones alprazolam online viagra online cheap ultracet hoodia online cyclobenzaprine online free ringtones cheap phentermine soma online real ringtones jazz ringtones vicodin zyban online free ericsson ringtones sagem ringtones cheap diazepam sharp ringtones free cingular ringtones adipex free verizon ringtones free qwest ringtones cheap clonazepam buy zanaflex mtv ringtones free mtv ringtones free kyocera ringtones free sony ericsson ringtones tenuate online real ringtones valium online cheap paxil didrex online sildenafil online nextel ringtones midi ringtones ativan online online xanax cyclobenzaprine online order lorazepam alltel ringtones cheap didrex mp3 ringtones cingular ringtones tracfone ringtones xanax online tracfone ringtones order norco fioricet online lorazepam online free free ringtones viagra online free wwe ringtones buy xanax zoloft online free free ringtones cheap sildenafil cheap xenical samsung ringtones cheap prozac ultracet online buy norco lipitor free motorola ringtones free sagem ringtones meridia online but hydrocodone diazepam online cheap ativan norco online cheap prozac free sonyericsson ringtones qwest ringtones lisinopril online cheap didrex cheap ultram online cialis
You are encouraged to solve this task according to the task description, using any language you may know.
Ada
Tested With:
- Gnat GPL 2005
- Amd-64bit-3500 -WinXP
with Ada.Text_Io; with Ada.Integer_text_IO; procedure Call_Back_Example is -- Purpose: Apply a callback to an array -- Output: Prints the squares of an integer array to the console -- Define the callback procedure procedure Display(Location : Positive; Value : Integer) is begin Ada.Text_Io.Put("array("); Ada.Integer_Text_Io.Put(Item => Location, Width => 1); Ada.Text_Io.Put(") = "); Ada.Integer_Text_Io.Put(Item => Value * Value, Width => 1); Ada.Text_Io.New_Line; end Display; -- Define an access type matching the signature of the callback procedure type Call_Back_Access is access procedure(L : Positive; V : Integer); -- Define an unconstrained array type type Value_Array is array(Positive range <>) of Integer; -- Define the procedure performing the callback procedure Map(Values : Value_Array; Worker : Call_Back_Access) is begin for I in Values'range loop Worker(I, Values(I)); end loop; end Map; -- Define and initialize the actual array Sample : Value_Array := (5,4,3,2,1); begin Map(Sample, Display'access); end Call_Back_Example;
C
Tested With:
- GCC 3.3.6
- i686-pc-linux-gnu
- GCC 3.4.6
- i686-pc-linux-gnu
- GCC 4.0.3
- i686-pc-linux-gnu
- GCC 4.1.1
- i686-pc-linux-gnu
- powerpc-unknown-linux-gnu
- TCC 0.9.23
- i686-pc-linux-gnu
- ICC 9.1
- i686-pc-linux-gnu
callback.h
#ifndef __CALLBACK_H #define __CALLBACK_H /* * By declaring the function in a separate file, we allow * it to be used by other source files. * * It also stops ICC from complaining. * * If you don't want to use it outside of callback.c, this * file can be removed, provided the static keyword is prepended * to the definition. */ void map(int* array, int len, void(*callback)(int,int)); #endif
callback.c
#include <stdio.h> #include "callback.h" /* * We don't need this function outside of this file, so * we declare it static. */ static void callbackFunction(int location, int value) { printf("array[%d] = %d\n", location, value); } void map(int* array, int len, void(*callback)(int,int)) { int i; for(i = 0; i < len; i ) { callback(i, array[i]); } } int main() { int array[] = { 1, 2, 3, 4 }; map(array, 4, callbackFunction); return 0; }
Output
array[0] = 1 array[1] = 2 array[2] = 3 array[3] = 4
C#
Platform: .NET
Language Version: 2.0
Compiler: Visual C# 2005
using System; static class Program { // Purpose: Apply a callback (or anonymous method) to an Array // Output: Prints the squares of an int array to the console. // Compiler: Visual Studio 2005 // Framework: .net 2 [STAThread] public static void Main() { int[] intArray = { 1, 2, 3, 4, 5 }; // Using a callback, Console.WriteLine("Printing squares using a callback:"); Array.ForEach<int>(intArray, PrintSquare); // or using an anonymous method: Console.WriteLine("Printing squares using an anonymous method:"); Array.ForEach<int> ( intArray, delegate(int value) { Console.WriteLine(value * value); }); } public static void PrintSquare(int value) { Console.WriteLine(value * value); } }
C
Compiler: GNU Compiler Collection 4.1.1
Using c-style array
#include <iostream> //cout for printing #include <algorithm> //for_each defined here //create the function (print the square) void print_square(int i) { std::cout << i*i << " "; } int main() { //create the array int ary[]={1,2,3,4,5}; //stl for_each std::for_each(ary,ary 5,print_square); return 0; } //prints 1 4 9 16 25
#include <iostream> //cout for printing #include <algorithm> //for_each defined here #include <vector> //stl vector class //create the function (print the square) void print_square(int i) { std::cout << i*i << " "; } int main() { //create the array std::vector<int> ary; ary.push_back(1); ary.push_back(2); ary.push_back(3); ary.push_back(4); ary.push_back(5); //stl for_each std::for_each(ary.begin(),ary.end(),print_square); return 0; } //prints 1 4 9 16 25
More tricky with binary function
#include <iostream> //cout for printing #include <algorithm> //for_each defined here #include <vector> //stl vector class #include <functional> //bind and ptr_fun //create a binary function (print any two arguments together) template<class type1,class type2> void print_juxtaposed(type1 x, type2 y) { std::cout << x << y; } int main() { //create the array std::vector<int> ary; ary.push_back(1); ary.push_back(2); ary.push_back(3); ary.push_back(4); ary.push_back(5); //stl for_each, using binder and adaptable unary function std::for_each(ary.begin(),ary.end(),std::bind2nd(std::ptr_fun(print_juxtaposed<int,std::string>),"x ")); return 0; } //prints 1x 2x 3x 4x 5x
Using Boost.Lambda
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
Clean
Define a function and an initial (unboxed) array.
square x = x * x values :: {#Int} values = {x \\ x <- [1 .. 10]}
One can easily define a map for arrays, which is overloaded and works for all kinds of arrays (lazy, strict, unboxed).
mapArray f array = {f x \\ x <-: array}
Apply the function to the initial array (using a comprehension) and print result.
Start :: {#Int} Start = mapArray square values
Common Lisp
Imperative: print 1, 2, 3, 4 and 5:
(map nil #'print #(1 2 3 4 5))
Functional: collect squares into new vector that is returned:
(defun square (x) (* x x)) (map 'vector #'square #(1 2 3 4 5))
Destructive, like the Javascript example; add 1 to every slot of vector *a*:
(defvar *a* (vector 1 2 3)) (map-into *a* #'1 *a*)
E
def array := [1,2,3,4,5] def square(value) { return value * value }
Example of builtin iteration:
def callback(index, value) { println(`Item $index is $value.`) } array.iterate(callback)
There is no builtin 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).
def map(func, collection) { def output := [].diverge() for item in collection { output.push(func(item)) } return output.snapshot() } println(map(square, array))
Forth
This is a word that will call a given function on each cell in an array.
: map ( addr n fn -- ) -rot cells bounds do i @ over execute i ! cell loop ;
Example usage:
create data 1 , 2 , 3 , 4 , 5 , data 5 ' 1 map \ adds one to each element of data
Fortran
program test C C-- Declare array: integer a(5) C C-- Fill it with Data data a /45,22,67,87,98/ C C-- Do something with all elements (in this case: print their squares) do i=1,5 print *,a(i)*a(i) end do C end
FP
Interpreter : "fp"
{square * . [id, id]}