Miten imperatiivinen, funktionaalinen ja looginen ohjelmoija ratkaisevat ongelman löytää kahden luonnollisen luvun suurin yhteinen tekijä [Scottin luvun 10.1 esimerkkiä mukaillen]:
Imperatiivinen ohjelmoija:
Laskeaksesi a:n ja b:n s.y.t:n tarkista ovatko luvut samat. Jos ovat,
vastaus on tämä luku. Jos luvut eivät ole samat, korvaa suurempi
luvuista a ja b lukujen erotuksen itseisarvolla ja aloita alusta.
Esim:
a = 9, b = 27, eivät samat, siis b := b-a; a = 9, b = 18, eivät samat, siis b := b-a; a = 9, b = 9, samat, BINGO!
Funktionaalinen ohjelmoija:
Lukujen a ja b s.y.t. on a, jos luvut ovat samat. Elleivät ne ole
samat, kutsutaan pienempää luvuista a ja b nimellä c.
Lukujen a ja b erotuksen itseisarvo olkoon d.
Sovella tätä samaa sääntöä c:n ja d:n s.y.t:in laskentaan,
niis saat alkuperäisten lukukujen s.y.t:in.
Esim:
a = 9, b = 27, eivät samat, siis c = 9 ja d = 18 c = 9, d = 18, eivät samat, siis c' = 9 ja d' = 9 c' = 9, d' = 9, ovat samat, BINGO!
Logiikkaohjelmoija:
Väittämä syt(a, b, g) on tosi, jos (1) a, b ja g ovat kaikki samoja
tai (2) on olemassa luvut c ja d siten, että c on a:n ja b:n minimi,
d on a:n ja b:n erotuksen itseisarvo, ja syt(c, d, g) on tosi.
Laskeaksesi annettujen lukujen s.y.t:in etsi sellainen luku g ja joukko
lukuja c ja d, joiden avulla annetuista säännöistä voidaan päätellä,
että syt(a, b, g) on tosi.
Esim:
syt(9, 27, 9) on tosi, koska säännön (2) takia syt(9, 18, 9) on tosi, koska säännön (1) takia syt(9, 9, 9) on tosi, BINGO!