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:
- Linux/Intel 32-bit (i386_linux)
- Linux/Intel 64-bit (x86_64_linux) -- NEW
- Sparc/Solaris (sparc_sunos5)
- Windows NT,2000,XP (i386_nt)
Libraries
New Libraries
- New Solver lib(sd)
- New Library for Local Search lib(tentative)
A simple solver for unordered symbolic domains. This is useful mainly for teaching purposes, and as a source template for implementing similar solvers.
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
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)
?- ( 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
- The hostid property, as returned by the get_flag/2 built-in is now more machine-specific, and incompatible with the result of previous ECLiPSe versions.
- Both the syntax precedence and the behaviour (with negative numbers) of the mod/2 arithmetic operation has changed. The syntax change means that "a*b mod c" was previously parsed as a*(b mod c), but is now parsed as (a*b) mod c. The behaviour change means that the result is different when the argument types have opposite signs: the result now always has the same sign as the second argument. Programs that rely on the old behaviour should use rem/2 instead.