Du er sikkert engang blevet konfronteret med en ven, som påstod at kunne læse dine tanker, og som lavede følgende trick: Tænk på et tal mellem 1 og 10; gang det med 9; summer tallene i resultatet (f.eks. 23 -> 2 + 3 = 5); og træk 5 fra summen. På dette tidspunkt er du måske nået frem til værdien 4. Hvordan kan jeg vide det? Ved at bruge det samme trick som din ven. Lad mig vise dig det ved hjælp af Clojure. Først skal vi skrive en funktion, der summerer cifrene i et tal:
Værdien omdannes til en streng, map-funktionen omdanner hvert ciffertegn til en liste af hele tal, og funktionen apply summerer listen af hele tal og returnerer summen til den, der kalder funktionen sum-cifre, og returnerer den samlede sum til den, der kalder funktionen sum-cifre. Vi skal bruge denne funktion til at sammensætte trickets beregninger:
Funktionen puslespil udfører beregningerne i den rækkefølge, som din ven har bedt dig om at udføre. Først ganges det tænkte tal med 9, derefter summeres cifrene i resultatet og til sidst trækkes summen med 5. Dernæst skal vi skrive endnu en funktion for at afsløre tricket:
(defn unveil (map #(puzzle %) (range 1 11)))
Funktionen rækkevidde producerer en række tal fra 1 til 10, hvor 11 ikke er medtaget (1 2 3 4 5 6 7 8 8 9 10). Funktionen map anvender funktionen puslespil på hvert tal i listen og producerer en anden liste med resultaterne. Udfør nu funktionen unveil for at se resultatet:
Oh, se! For intervallet fra 1 til 10 vil resultatet altid være 4. Med andre ord, et mønster. Mønstre er meget tilstede i multiplikationer, og når man fjerner dem alle sammen, har man primtal, som Mark Haddon påpegede i sin bog “The Curious Incident of the Dog in the Night-Time”. Daniel Tammet giver eksempler på nogle mønstre i sin bog “Thinking in Numbers”: How Maths Illuminates Our Lives”. Når vi ganger et lige tal med 5, får vi altid tal, der ender på nul (f.eks. 12 x 5 = 60), og når vi gør det med ulige tal, får vi altid tal, der ender på 5. I tilfældet med 9 får vi, hver gang vi ganger 9 med et tal mellem 1 og 10 og summerer dets cifre, altid 9.
I rækkefølgen vil subtraktion af 5 fra 9 blot aflede din opmærksomhed fra multiplikationsmønsteret og endda forbedre tricket. For eksempel: Forestil dig, at hvert bogstav i alfabetet har et tilsvarende tal (A – 1, B – 2, C – 3, …). Tag nu resultatet (4) og få dets respektive bogstav; tænk på et land, der begynder med dette bogstav; tag det fjerde bogstav i dette land og tænk på et dyr, der begynder med dette bogstav. Der er stor sandsynlighed for, at dit endelige svar vil være “Danmark” og “abe”. Inden du tror, at jeg læser dine tanker, skal jeg forklare dig, hvad der lige er sket.
For det første er der ikke mange lande, der starter med “D”, det fjerde bogstav i alfabetet. Blandt Danmark, Djibouti, Dominica og Den Dominikanske Republik vil du let kunne huske Danmark. Det fjerde bogstav i Danmark er “M”, og intet dyr, der begynder med “M”, er mere berømt end aben, som man straks kommer til at tænke på.
Jeg har det sjovt med at programmere i Clojure, ikke kun fordi Clojure er sjovt at lære og undervise i, men fordi programmering ikke altid handler om alvorlige ting. At være i stand til at programmere lige nok kode til at få ting til at ske stimulerer tænkning, problemløsning og kreativitet frem for struktur, mønstre, konventioner og stilarter. Kodning skal være afslappende, ikke stressende. Nyd det!