• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Uncalled lambda's (thunks).

JEC.

Terugkerende gebruiker
Lid geworden
27 feb 2019
Berichten
4.660
Office versie
365
Voor geïnteresseerde lezers, die niet bang zijn om zich ergens in vast te bijten, heb ik een uitdagend onderwerp.
Ik kwam laatst een techniek tegen waarbij gebruik werd gemaakt van uncalled lambda's, ook wel thunks genoemd. Dit zijn functies zonder parameters, welke je later aanroept.

Het gebruik hiervan kan in bepaalde situaties efficiënter zijn dan 'reguliere' formules. Bijvoorbeeld in accumulerende formules, waarbij tussentijds een waarde wordt opgeslagen, ga je verschil merken. Los van snelheid, levert het je ook mogelijkheden op om bepaalde kwesties in één dynamische array op te lossen.

Ik zal een poging doen om het uit te leggen adhv een voorbeeld;
Als voorbeeld neem ik de MAP functie. Deze functie geeft in basis het formaat van de array terug die je opgeeft. Geef je 1-dimensionaal, krijg je 1-dimensionaal. In de bijlage staat een situatie waarbij je via de MAP functie, in combinatie met deze "thunks", een 2-dimensionale array terugkrijgt, terwijl ik een 1 dimensionale invoer in de MAP functie.

Code:
=LET(
   THUNK; LAMBDA(a;b;LAMBDA(x;CHOOSE(x;a;b)));
   arr; THUNK(MAP(TAKE(H2#;;1);TAKE(H2#;;-1);THUNK); BYCOL(D2:F28;LAMBDA(x;LAMBDA(x))));
   MAP(arr({1}); arr({2}); LAMBDA(rep;col; SUMIFS(col(); A2:A28; rep(1); B2:B28; rep(2); C2:C28; ">="&DATE(H1;1;1); C2:C28; "<="&DATE(H1;12;31))))
)

In de "arr" regel roep je de lege choose functie aan en plaats je een verticale vector én een horizontale vector. De choose geeft hierdoor een 2-dimensionaal bereik terug voor iedere regel. De BYCOL functie fungeert zelf ook als een 'uncalled lambda', omdat deze geen parameter meekrijgt. In de laatste regel MAP je door de 2-d arrays, bestaande uit functies (en dus geen waarde!). Wat opvalt, is dat col() wordt geaccepteerd in de SUMIFS, omdat het een range is. Je hebt nu dus één dynamische array formule, waar je normaal voor iedere cel een eigen formule nodig zou hebben.

Ik durf te wedden dat meerdere mensen hier enthousiast van worden! ;)
 

Bijlagen

Terug
Bovenaan Onderaan