Corso di Applicazioni di Intelligenza Artificiale LS


Istruzioni per l'uso del Sistema ECLiPSe


Questo documento vuole fornire qualche indicazione e sottolineare alcuni aspetti a proposito del sistema ECLiPSe, pur non volendo e non potendo proporsi in alternativa al manuale del sistema. Il sistema ECLiPSe è installato sulle macchine Sun del lab2.

Avvio di ECLiPSe

Il sistema viene avviato, al prompt della shell, dal comando eclipse. All'avvio il sistema si identifica e presenta il proprio prompt, con un output del tipo

ECLiPSe Constraint Logic Programming System [sepia mps standalone]
Version 3.6.1, Copyright ECRC GmbH and ICL/IC-Parc, Wed Aug 20 19:54 1997
[eclipse 1]:

Caricamento di programmi

I programmi Prolog possono essere caricati nel sistema mediante la stringa nome file (precedentemente salvato come .pl) tra parentesi quadre:

[eclipse 2]: [esercizio].
esercizio.pl compiled traceable 672 bytes in 0.00 seconds
yes
[eclipse 3]:

Il sistema compila in un codice intermedio il programma esercizio.pl (si noti che l'estensione è fissa e non va specificata) cercandolo nella directory corrente.

Tracing

Il comando trace consente di seguire passo passo la risoluzione delle clausole; tale modalità può poi essere disabilitata con il comando notrace.

Uso della libreria su domini finiti

ECLiPSe fornisce un risolutore di vincoli su domini finiti. Tale risolutore è fornito come libreria che si carica tramite il comando:

[eclipse 2]: lib(fd).
/opt/eclipse/lib/structures.pl compiled traceable 5436 bytes in 0.05 seconds
/opt/eclipse/lib/sorts.pl compiled traceable 1028 bytes in 0.01 seconds
/opt/eclipse/lib/fd_domain.sd loaded traceable 28984 bytes in 0.23 seconds
/opt/eclipse/lib/fd_arith.sd loaded traceable 70028 bytes in 0.57 seconds
/opt/eclipse/lib/fd_util.pl compiled traceable 1944 bytes in 0.03 seconds
/opt/eclipse/lib/fd_chip.pl compiled traceable 3936 bytes in 0.08 seconds
/opt/eclipse/lib/fd_elipsys.pl compiled traceable 10776 bytes in 0.07 seconds
/opt/eclipse/lib/fd.sd loaded traceable 18976 bytes in 0.81 seconds

yes.
[eclipse 4]:

A questo punto possono essere definite variabili con dominio tramite la sintassi del tipo: [eclipse 4]: X::[1..10], Y::[3,4,9].

X = X{[1..10]}
Y = Y{[3, 4, 9]}
yes.

e vincoli. Si noti che i vincoli matematici sono sempre preceduti dal simbolo # in modo da differenziarli dai vincoli matematici tipici di Prolog che agiscono come test ma non hanno nessun meccanismo di propagazione associato.

[eclipse 4]: X::[1..10], Y::[1..10], Y#>X.

X = X{[1..9]}
Y = Y{[2..10]}

Delayed goals:
Y{[2..10]} - X{[1..9]}#>=1
yes.
[eclipse 5]:

In questo esempio il vincolo non è risolto e viene addormentato (delayed goal). Nel caso in cui avvenisse un qualche evento su una delle due variabili, il vincolo sarebbe risvegliato ed effettuerebbe di nuovo la propagazione. Ad esempio, il vincolo X#>5 nel seguente programma modifica il dominio di X che risveglia il vincolo tra X e Y che di nuovo effettua la propagazione e si riaddormenta.

[eclipse 4]: X::[1..10], Y::[1..10], Y#>X, X#>5.

X = X{[6..9]}
Y = Y{[7..10]}

Delayed goals:
Y{[7..10]} - X{[6..9]}#>=1
yes.
[eclipse 5]:

ECLiPSe fornisce inoltre predicati per la ricerca. Esiste un predicato indomain(X) che istanzia la variabile X a un valore del suo dominio (e in backtracking agli altri).

[eclipse 4]: X::[1..10],Y::[1..10], Y#>X, X#>5, indomain(X).

Y = Y{[7..10]}
X = 6 More? (;)

Y = Y{[8..10]}
X = 7 More? (;)

Y = Y{[9, 10]}
X = 8 More? (;)

Y = 10
X = 9
yes.
[eclipse 5]:

Infine, viene fornito un predicato labelling(List) che effettua una indomain su tutte le variabili contenute nella lista List.

ECLiPSE Prolog User's Manual

Si ricorda nuovamente che la guida di riferimento rimane comunque il manuale utente fornito a corredo del sistema disponibile in laboratorio.

Ulteriori informazioni sono disponibili all'indirizzo http://www-icparc.doc.ic.ac.uk/eclipse/ con alcuni esempi di programmi.