FileMaker Tip 353

Custom functions (deel 3 met groentensoep voor dummies)

 

Pas vandaag komen we aan de custom functie die onze vraagsteller wenste in tip 351 (en daarna maken we verse soep, even geduld). Hij wilde dat de vermenigvuldiging gemaakt werd van een reeks getallen*. We maken zo'n functie en noemen die StoneCalc.

Als we die reeks te vermenigvuldigen getallen StoneList noemen en het aantal getallen in die reeks Counter, dan kunnen we de functie op deze manier neerschrijven:

StoneCalc(StoneList;Counter)

Voor een StoneList met de waarden 8, 12 en 10 geeft dat dus de waarde 3 aan Counter. We moeten dus gaan vermenigvuldigen tot onze counter op 0 staat en we gebruiken als vermenigvuldigtal het getal dat overeenkomt met de waarde van counter (voor waarde 2 is dat dus 12 en voor waarde 3 bijvoorbeeld 10). Uiteindelijk doen we dus

10 * 12 * 8 * 1

Voor de Die Hards onder jullie volgt hier de custom functie, de overigen mogen meteen naar de soep.

Let ( var1 = GetValue (StoneList ;Counter ) ;
var1 * If((Counter - 1) > 0 ; StoneCalc(StoneList;Counter-1);1))

En nu de soep. Er zijn nogal wat vragen binnengekomen over die recursieve functie van vorige week: "Hoe kan een functie zichzelf aanroepen? Hoe kan je iets onderbreken om het weer te doen en dat dan weer onderbreken om het nog eens te doen, enzovoort?". Tja, lastige vraag.

We proberen het uit te leggen in onze hotelkeuken. Stel dat we onze chef vragen een frisse groentensoep te maken met de ingrediënten van bladzijde 28 van het Groot Belgische frietenkotkookboek. Hij pakt zijn ketel en - zoals te lezen staat op die pagina - de prei, de selder, de uien de tomaten, de peper en het zout.

Onze chef begint, vult de ketel met water en zet die op het vuur. Maar hij is amper bezig of meteen daarna geef ik hem opnieuw de opdracht een frisse groentesoep te maken. Onze chef weet dat we nogal rare dingen durven vragen, dus, hij begint er meteen aan. Hij zet weer een ketel op het vuur, neemt het eerste ingrediënt en gooit dat in het water. Meteen daarop vragen we hem nog eens een frisse groentensoep te maken. Geen probleem. Er komt weer een ketel op het vuur, maar het eerste ingrediënt is al weg. Dus gaat het tweede erin. En dan vragen we wéér een frisse groentesoep te maken. Nieuwe ketel op het vuur en derde ingrediënt erin. Zo gaan we met z'n tweeën door tot alle ingrediënten op zijn. We gieten alle ketels bij mekaar, en de soep is klaar**.

 


* Dat doet een beetje denken aan de faculteit-functie: 4! = 4 * 3 * 2 * 1 = 24

** Ondertussen breken we ons het hoofd over de vraag wie met de meest kritische opmerking voor de pinnen gaat komen. We vermoeden dat dat van ergens aan het water in het noorden van een bevriende natie gaat zijn.

 

Terug naar het selectiemenu voor de tips.