Apply a callback to an array
matshita dvd ram uj 811 testi fiorella mannoia foto sotto gonna fleuve, regione- panasonic car audio foto spazio leadtek px6600 gt panther todo biarritz hotel memory webber instrumental arrigo boito. mefistofele compiti del testimone matrimonio toner ricoh arab film ciro de luca bungalows lollipop you due uomini in fuga... per un colpo paese by nicola di bari fox derby (contea) plan b dj joe il capo regala un sistema audio professionale samsung robert altman biografia www tim com pe mensajes sesso matto tus viejas cartas metalfinishing srl killing berg tutta dance 11 da rpg grade fratello monitor sony 15 townhouse 31 riviste on line usb lan printer server majorca matix fondotinta givenchy schiavi di new york gioci per pc matera lg tv plasma rz-42 programmi download gratis nokia conchiglia asian fuck impronte digitali usb borse di plastica incontri gratis immagini ii guerra mondiale highwayman un poker di pistole casa affitto in liguria a spotorno hocus pocus the disney movie com l esigenza geforce go 6 lancia delta 1995 vacanza studio usa le colline hanno gli occhi 2 dragostea don tei locali scambisti palmari 4 multifunzione epson rx videos del perreo espansione di memoria k8v e aspirapolvere 2000w amstrad codici gameshark gba rammstein amerika foto asiatiche www zipsp it soundtrack the godfather valente vitantonio sin testigos luciano pereyra sacrifice lisa gerrard driver audio creative ct 4810 brisbane ristorante il cacciatore di alieni foto santa lucia manuale di seduzione avi codec www toyota com ahmet hikmet s i p a d calciatori nudi sound blaster x-fi mar rosso titulos de credito aggiornamento su unreal 2 nude teens www supereva it assorbente avellino hentai puzle seat ibiza anno 2003 donne lecco arrebatados denni fantina orologio festina jazz suite liberatoria per foto rosario flores cd musicali dighe in lombardia import export - legno pamela anderson xxx urali orthonet palmari acer n35 con gps you touch my ta lal la negozio di scarpe canon eos mark ii partiti politici cagliatura golf 1.6 sportline la politica fue polar fs1 malta alberghi e hotel jedy leave get out video il principe ladro puglia albergo citrovorum factor baci nel cinema cavo dv canon meridiana com fabbricatore ghiaccio toshiba satellite pro a60 sculacciate ragazze daniela legnano base per graco autobaby pro mixer djx700 pagani musica salsa scarica canzone zero assoluto tutto su aerei futura soluzzioni giochi gabicce mare vacanza felpa converse alloggio ibiza chicco triciclo combo lettore dvd vcr televisori schermo piatto volo gran bretagna che guevara mont saint michel inquinamento a kabul gaggia gelateria bensley hitachi 1 8 l aquila autisti zoccola matura sigma obiettivi nikon fotocamere deux ange kool shen foliesdepigalle panasonic dmc-fz30eg ha kieu a mercedes 350 cls hp photosmart p1000 sito internet caserta giuseppe tubi arte digitale lo scioglimento dei ghiacciai www clickar it gelait stampante canon 3200 laser raphael saadiq instant vintage bmw 328 triplite acer -ferrari 4005 na raz george montgomery l italiano toto lacie d2 hard drive 160gb serial ata spagna 1982 shup up showgirl italiana varia d f biscotti a forma umana heino impianti surround 2 1 www mercedes benz de brancati, vitaliano vips mia bela madunina accordi de andre raconti estrazionidel lotto syusy blady cartoline virtuali musicali freek banca popolare verona the blanc batterie alcaline movie pamella anderson free an- jag midi mercedes livorno testo gianluca grignani audigy bulk tammorriata guerlain vetiver
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]}