Functies toepassen op elementen van een lijst

Een operatie uitvoeren op elk element van een lijst is erg eenvoudig, hiervoor kan men de functie 'map' gebruiken.

> Lijst := [a,b,c,d,e];

[Maple Math]

> map(sqrt,Lijst);

[Maple Math]

Of, met behulp van een zogenaamde lambda of anonyme functie:

> map(x -> sqrt(x),Lijst);

[Maple Math]

Indien de functie meerdere parameters heeft kan men deze als parameters van 'map' opgeven:

> map((f,x,a) -> int(f,x=0..a),['x','x'^2,'x'^3],'x','a');

[Maple Math]

Indien de lijst nu echter de tweede parameter van de functie moet vormen is het gebruik van 'map' niet mogelijk, er is echter ook nog de functie 'map2' die precies voor dit geval voorzien werd.

> map2(diff,3*x^2 + 2*x*y^2 + z,[x,y,z]);

[Maple Math]

De 'map' en de 'map2' functie voeren een functie uit op elk element van een enkele lijst, de 'zip' functie laat een binaire functie inwerken op elk paar elementen van twee lijsten met gelijke lengte.

> L1 := [a,b,c]: L2 := [d,e,f]:

> zip((x,y) -> sqrt(x^2 + y^2),L1,L2);

[Maple Math]

Hier werd de binaire lambda functie '(x,y) -> sqrt(x^2 + y^2)' gebruikt.

Een functie kan ook toegepast worden op een of meerdere specifieke elementen uit een lijst.

> applyop(x -> sqrt(x),2,Lijst);

[Maple Math]

> applyop(x -> sqrt(x),{2,4},Lijst);

[Maple Math]

Ook op geneste lijsten kan de functie 'map' gebruikt worden, zij het met enige voorzichtigheid, immers:

> NLijst := [[a,b,c],[d,e,f]];

[Maple Math]

> map(sqrt,NLijst);

Error, sqrt expects its 1st argument, x, to be of type algebraic, but received [a, b, c]

Dit is duidelijk niet het gewenste resultaat. De functie 'sqrt' krijgt een lijst als argument, maar is enkel gedefinieerd voor scalars. 'sqrt' moet eigenlijk toegepast worden op elk element van elke rij. Een functie 'map' moet toegepast worden op elke rij zodat deze 'sqrt' laat inwerken op elk element uit die rij. Dit kan eenvoudig met een lambda functie 'x -> map(sqrt,x)'.

> map(x -> map(sqrt,x),NLijst);

[Maple Math]

Om een functie te laten inwerken op een specifiek onderdeel van een lijst is 'applyop' weer nuttig.

> applyop(sqrt,[1,2],NLijst);

[Maple Math]

> Lijst := 'Lijst': L1 := 'L1': L2 := 'L2': NLijst := 'NLijst':