Robot alla guida di veicoli

Alcuni robot possono salire e scendere da veicoli a un posto (in uno stesso veicolo, cioè, non possono contemporaneamente stare più robot), guidare veicoli o spostarsi a piedi da un luogo a un altro.

Le azioni possibili sono: drive(R,V,X,Y) (il robot R guida il veicolo V dal luogo X al luogo Y; può essere eseguita solo se R è già su V), go(R,X,Y) (il robot R si sposta a piedi dal luogo X al luogo Y), geton(R,V,X) (il robot R sale sul veicolo V che si trova nel luogo X) e getoff(R,V,X) (il robot R scende dal veicolo V nel luogo X).

I fluenti utilizzati sono at(X,Y,S) (il robot o veicolo X si trova nel luogo Y nella situazione S) e on(R,V,S) (il robot R è sul veicolo V nella situazione S). Si possono naturalmente utilizzare, se necessario, predicati statici per tipizzare gli oggetti o per definire proprietà che non cambiano nel tempo.

Scrivere:

  1. una procedura sposta(V,X) che, quando eseguita, fa sì che un qualsiasi robot guidi il veicolo V dal luogo in cui si trova al luogo X. All'inizio dell'esecuzione della procedura, V puo` essere occupato da un robot oppure no, e possono esserci o no dei robot nel luogo in cui si trova V; alla fine dell'esecuzione V deve essere vuoto. L'esecuzione della procedura fallisce se il veicolo V si trova già nel posto X.

  2. una procedura spostatutti(Dest) che, quando eseguita, sposta tutti i veicoli e tutti i robot nel posto Dest. I robot, alla fine della procedura devono essere tutti a terra.

 
Soluzione proposta

marta
2012-04-17