ECLiPSe 5.9 Release Notes

Version 5.9 (2006-05-20)

ECLiPSe is no longer maintained by IC-Parc/Imperial College London. This release has been prepared by CrossCore Optimization Ltd for Cisco Systems. At the time of release, there is no academic licensing scheme in place, but an effort is underway to make the system available under an open- source licence, probably the Mozilla Public Licence.

Supported Architectures

This release is available for the following architectures:

Versions for Linux/Alpha and PPC/MaxOSX are currently unavailable because we don't have the necessary infrastructure.

Libraries

New Libraries

New Solver lib(sd)

A simple solver for unordered symbolic domains. This is useful mainly for teaching purposes, and as a source template for implementing similar solvers.

New Library for Local Search lib(tentative)

A library supporting classical Local Search methods.

Library Enhancements

lib(ic) and related libraries
Most constraints that worked on lists now accept a more general form of collections, in particular arrays and sub-arrays, to make modelling more convenient, e.g.
    alldifferent(Array[1..N])
Various improvements in ::/2 and related predicates. ::/2 now accepts mixed-type ranges: if any non-integer type is present, the domain is taken to be real.
Eplex

New probes for eplex_probe/lp_probe:

rhscoeffs
modify the rhs coefficients
bounds
change the problem bounds (widening as well as narrowing)
perturb_obj
change the objective function by perturbing the objective coefficients
allow the user to get best/worst bounds for the optimal objective value. This is particularly useful if the problem was aborted without an optimal solution.

Support for cutpool constraints, also known as `global cuts'. This allow the user to include constraints for problem that are not removed on backtracking, with flexibility on how they are added to the problem solved by the external solver.

Change of behaviour:

  • unification of two eplex problem variables now behave more logically: their bounds are made consistent, and may trigger the external solver.
  • problem state information is now always available until the external solver is triggered again

lib(graphviz)
New predicate view_graph/3 allows to display new graphs in existing window, for simple animations. Viewers monitor input file for changes and redisplay.
lib(lint)
Warnings can now be suppressed via pragmas.
lib(ordset)
Complete update, compatible with other known systems and standardisation draft.
lib(repair)
Allow for visualisation of changing tentative values via lib(viewable) and the visualisation client.
lib(toplevel)
The library has been updated to support a remote ECLiPSe server.
lib(lists)
Added collection_to_list/2 and flatten/3.

Java Interface

The (non-embedded version of the) Java-Interface now implements asynchronous queues.

TkEclipse Development Environment

Now accepts -g and -l command line options to limit stack sizes.

Kernel

Additions and Modifications

Do-Loops
Do loops accept new iteration specifiers that can avoid to need for nested loops in many cases:
*
cross product of the iteration over two other iteration specifiers
>>
nested iteration (simliar to *, but different variable scoping)
Example:
?- ( for(I,1,3) * foreach(J,[a,b]), foreach(K,L) do K=I-J ).
L = [1 - a, 1 - b, 2 - a, 2 - b, 3 - a, 3 - b]
Event handling
Streams can raise anonymous events. Sockets can now configured to raise synchronous events, even on Windows.
Host-Id
Host-ids are now computed differently. The result is a string that is a more reliable identifier for the host hardware.
Arithmetic
The semantics of the mod-operation used to be unspecified for negative argument values, but in practice returned the remainder corresponding to a truncating division. This behaviour has been changed in order to comply better with the Prolog standard and the conventions in many modern programming languages. The mod-operation now computes the remainder corresponding to the new div/2 division operator, which rounds towards negative infinity. The remainder corresponding to truncating division (//) is now computed by rem/2.

New Built-in predicates

*->/2
soft-cut operator is now a regular built-in
current_pragma/1
test for pragmas during compilation
deprecated/2
Declare predicate as deprecated
flatten_array/2/1
flatten an array into a list
is_list/1
test for proper list
read_annotated/2
Read terms annotated with source information
setenv/2
modify process environment
shelf_inc/2, shelf_dec/2
new shelf operations to support nonlogical counters
div/3,rem/3
New division and remainder operations, such that X =:= Y*(X // Y) + X rem Y and X =:= Y*(X div Y) + X mod Y.
succ/2
Successor over natural numbers, bidirectional
truncate/2
Round towards zero to next integral number (completes the group floor/2, ceiling/2, round/2, truncate/2)
integer/2
Convert an integral number of any numeric type to integer type

Compiler

Better deprecations warnings, new deprecation declaration deprecated/2.

Enhanced pragma mechanism, and new predicate current_pragma/1.

Warning when file is recompiled because it changed.

Full implementation of soft-cut (*->/2).

Parser extended to return terms annotated with source information.

Incompatibilities