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:

Problema

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.