Eclipse-clp (Constraint Logic Programming)
ECLiPSe Constraint Programming System è utilizzabile per risolvere problemi logici.
In laboratorio è installato nella directory /opt/eclipse-clp
.
Sebbene il nome sia simile, non ha niente a che vedere con l’IDE Eclipse!
Esempio di utilizzo
Vediamo come risolvere un semplice problema descritto in una famosa striscia webcomic:
Definiamo un problema logico, creando un file xkcd287.ecl
con il seguente contenuto:
%
% A small example solving the problem from the cartoon
% http://xkcd.com/287/
%
:- lib(ic).
solve(Amounts) :-
Total = 1505,
Prices = [215, 275, 335, 355, 420, 580],
length(Prices, N),
length(Amounts, N),
Amounts :: 0..Total//min(Prices),
Amounts * Prices #= Total,
labeling(Amounts).
E poi lanciamo il solver per risolverlo:
/opt/eclipse-clp/bin/x86_64_linux/eclipse -f xkcd287.ecl
Dovremmo ottenere qualcosa di simile a questo:
lab99:~ $ /opt/eclipse-clp-7.0_44/bin/x86_64_linux/eclipse -f xkcd287.ecl
ECLiPSe Constraint Logic Programming System [kernel threads]
Kernel and basic libraries copyright Cisco Systems, Inc.
and subject to the Cisco-style Mozilla Public Licence 1.1
(see legal/cmpl.txt or http://eclipseclp.org/licence)
Source available at www.sourceforge.org/projects/eclipse-clp
GMP library copyright Free Software Foundation, see legal/lgpl.txt
For other libraries see their individual copyright notices
Version 7.0 #50 (x86_64_linux), Tue Sep 24 11:40 2019
[eclipse 1]:
A questo punto possiamo chiedere al solver di rispondere alle
nostre domande. In questo caso ci interessa sapere come deve
essere fatta l’ordinazione, per cui digitiamo: solve(Amounts).
.
Dovremmo ottenere la risposta a video, subito sotto la query:
[eclipse 1]: solve(Amounts).
Amounts = [1, 0, 0, 2, 0, 1]
Yes (0.00s cpu, solution 1, maybe more) ?
Il sistema ci avverte anche che potrebbero esserci altre soluzioni
al problema; per cercarle, digitiamo: ;
.
Dovremmo ottenere l’ulteriore risposta a video:
Yes (0.00s cpu, solution 1, maybe more) ? ;
Amounts = [7, 0, 0, 0, 0, 0]
Yes (0.00s cpu, solution 2)
[eclipse 2]:
clp(Q,R) constraint solver
Assieme a Eclipse-CLP, in laboratorio è installato questo solver aggiuntivo.