Ga naar hoofdinhoud

Functies werken samen

Hier bouw je op verder: Functies, Parameters en Return-waarden

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Leerdoel: je weet wat een functie doet (input → output), en je ziet hoe de output van één functie de input van een andere kan zijn. Dit patroon gebruik je straks in elke bouwsteen.

Wat is een functie ook al weer?​

Een functie is een kleine machine: je stopt er iets in en je krijgt er iets uit.

def kwadraat(x):
return x * x

def kwadraat(x): is de kop, met x als parameter. return x * x is wat eruit komt. De aanroep kwadraat(5) geeft 25.

In ons minimax-project:

def player(bord):
# ... uitwerking ...
return "X" # of "O"

De input is een bord (een 3×3-lijst), de output "X" of "O".

Functies kun je stapelen​

De output van de ene functie kan direct de input van een andere zijn.

print(kwadraat(kwadraat(2))) # (2²)² = 16

Dat werkt van binnen naar buiten: kwadraat(2) is 4, dan kwadraat(4) is 16, en dat wordt geprint.

Een minimax-voorbeeld vooruit​

Straks gaan we dit doen:

nieuw_bord = result(bord, (0, 0)) # past zet toe
wie_won = winner(nieuw_bord) # checkt of er een winnaar is

result geeft een nieuw bord terug, en dat bord stoppen we direct in winner. Korter, gestapeld:

wie_won = winner(result(bord, (0, 0)))

Lees van binnen naar buiten: pas zet (0,0) toe, geef het nieuwe bord aan winner.

Voorspel​

Wat denk je dat dit print?

def verdubbel(x):
return x * 2

def plus_drie(x):
return x + 3

print(plus_drie(verdubbel(5)))
print(verdubbel(plus_drie(5)))
Antwoord
13
16

plus_drie(verdubbel(5)): eerst verdubbel(5) = 10, dan plus_drie(10) = 13.

verdubbel(plus_drie(5)): eerst plus_drie(5) = 8, dan verdubbel(8) = 16.

De volgorde maakt uit: wissel je de twee functies om, dan krijg je een ander antwoord.

Run​

Python
Code-omgeving wordt voorbereid…

Een functie kan ook een andere functie aanroepen​

Tot nu toe zagen we functies stapelen bij de aanroep. Maar een functie mag binnenin zijn body ook een andere aanroepen:

def kwadraat(x):
return x * x

def som_van_kwadraten(a, b):
return kwadraat(a) + kwadraat(b)

som_van_kwadraten doet zelf weinig: hij laat kwadraat het werk doen. Dat heet compositie, een functie bouwen uit andere functies.

Python
Code-omgeving wordt voorbereid…

Waarom dit relevant is​

In de bouwstenen hierna bouw je tien functies, en die roepen elkaar aan:

  • terminal(bord) roept winner(bord) aan.
  • result(bord, zet) wordt door max_value, min_value en minimax aangeroepen; het nieuwe bord gaat meteen door naar min_value of max_value.
  • max_value(bord) en min_value(bord) roepen elkaar aan.
  • minimax(bord) roept actions, result, player en die twee aan.

Elke functie is op zichzelf klein; samen zijn ze een AI.

Eén gouden regel: één functie, één taak​

Een goede functie doet één ding. winner zegt wie heeft gewonnen: hij print niets, verandert het bord niet en speelt zelf geen zet. Hij geeft alleen "X", "O" of None terug.

Door je code in zulke kleine functies te splitsen kun je ze los testen: winner op een vol bord, op een leeg bord, op een bord waar alleen de diagonaal vol is. Elk geval apart, zonder dat de hele AI hoeft te draaien.

Wat nu?​

De eerste functie is de makkelijkste: initial_state(), een leeg bord teruggeven.

Door naar bouwsteen 1: initial_state →.