Reguliere reisprogramma's met tests

 
 

Deze animatie is verrijking van de "OV-calculator" van vorige week. Naast dat er nu ook een spoorlijn loopt van Vdam naar Adam, zijn de plaatsen (toestanden) ook voorzien van lokale informatie. Deze informatie bestaat uit twee propositionele variabelen mooi en gezellig. Als zo'n variabele waar (1, true) is, dan staat dat zwart op wit vermeld bij de desbetreffende plaatsnaam. In het geval van onwaarheid (0, false) staat dit wit op zwart vermeld. Zo is Rdam gezellig, maar niet mooi.


   
KEYBOARD  
T R I P S

Instructies

De instructies zijn gelijk aan die van de reguliere reisjes machine van vorige week, voor wat betreft de reguliere constructies. Als je daar nog niet mee gewerkt heb, probeer die dan eerst voordat je met deze machine aan de gang gaat. Daarnaast kan je tests uitvoeren op de toestanden. Een test is een programma wat bestaat uit een propositioneel logische formule, gevolgd door een vraagteken. Zo'n testprogramma verandert de toestand niet, maar blijft in dezelfde toestand indien de test slaagt (de geteste propositie is waar). Indien de test faalt (de geteste propositie is onwaar), dan er geen succesvolle opvolgende toestand, en faalt het programma dus ook. Zo levert een gezelligheidstest (g?) de overgangsparen (Adam,Adam) en (Rdam,Rdam). Je kan natuurlijk ook complexere proposities testen. Bijvoorbeeld (g->m)? de overgangen (Adam,Adam),(Vdam,Vdam) en (Edam,Edam).
Tests kan je nu combineren de reguliere programmaconstructies. Het programma B;g? geeft je de busreizen die eindigen in een gezellige plaats. Alleen (Adam,Rdam) is hier een succesvolle overgang. Het programma m?;(B U T);(-g)? zijn de reisjes die beginnen in een mooie toestand en na het nemen van een bus of trein eindigen in een ongezellige toestand. Hier is ook maar een overgang succesvol (welke?).
Met behulp van tests hebben we nu voldoende constructies om echte programma-instructies te definiëren en vervolgens hun overgangen te berekenen. Bijvoorbeeld, de selectie if g -> B [] m -> T fi, is niks anders dan (g?;B) U (m?;T) (zie ook het redeneerdictaat). Drie overgangen voldoen aan deze beschrijving (welke?).
Ook de repetitie do ... od is te definiëren met behulp van (o.a.) de iteratie *. Bijvoorbeeld do (-g) -> T od (neem de trein zolang het ongezellig is), definieer je als ((-g)?;T)*;g? (dit geeft voor elke toestand een succesvolle overgang. Welke?)

© JAN JASPARS. This page contains a JavaScript 1.1-code, and has been developed for the Programming & Reasoning teaching group.