La valigia

Un robot con una grande borsa si può spostare tra diversi posti, mettere oggetti dentro la borsa e toglierli dalla borsa. Si rappresenti il dominio, utilizzando:

Si scrivano le seguenti procedure:

  1. goto(Loc): il robot va nel posto Loc. Se già si trova in Loc, non viene eseguita alcuna azione, ma la procedura ha successo cumunque.
  2. prendi(X): il robot va a prendere l'oggetto X e lo mette nella borsa. Fallisce se X è già nella borsa.
  3. porta(X,Y): il robot va a prendere l'oggetto X e lo porta nel posto Y. Se X già si trova in Y non viene eseguita alcuna azione (la procedura ha successo comunque).
  4. svuota: il robot svuota la borsa nel posto in cui si trova. Scrivere due versioni della procedura, una che utilizzi il costrutto while e una ricorsiva. Per implementare quest'ultima, si utilizzi una funzione ausiliaria con un parametro Loc, mediante la quale il robot svuota la borsa nel posto Loc (in cui si trova).
  5. prenditutti(Loc): il robot va (se già non vi si trova) nel posto Loc e raccoglie nella borsa tutti gli oggetti che vi si trovano. Anche in questo caso, implementare due versioni della procedura, con e senza il costrutto while. Nella versione ricorsiva, utilizzare un'opportuna procedura ausiliaria che realizza il ``ciclo''.

  6. portatutti(Dest): il robot raccoglie tutti gli oggetti che ci sono in giro e li porta nel posto Dest.

  7. raccogli(List), dove List è una lista (Prolog) di oggetti: il robot svuota la borsa e poi raccoglie e mette nella borsa tutti gli oggetti che sono in List.
  8. portalista(List,Dest): il robot porta nel posto Dest tutti gli oggetti della lista List.

 
Soluzione proposta

marta
2012-04-17