# Ann: SWI-Polog 8.3.18

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-polog-8-3-18/3516>\
**Category:** Releases\
**Created:** [January 23, 2021, 4:58pm UTC](https://swi-prolog.discourse.group/t/ann-swi-polog-8-3-18/3516 "2021-01-23T16:58:37Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [January 23, 2021, 4:58pm UTC](https://swi-prolog.discourse.group/t/ann-swi-polog-8-3-18/3516/1 "2021-01-23T16:58:37Z")

</div>

Dear SWI-Prolog user,a

I’m happy to announce SWI-Prolog 8.3.18. This release fixes a possible  
crash trying to create a dict from invalid data. It fixes a number of  
issues regarding zero-arity compounds `name()` and using the empty list  
as a predicate.

Most of the work is on _monotonic tabling_, improving the update  
planning and fixing the update logic for various scenarios of different  
tables depending on each other.

```
Enjoy --- Jan

```

# SWI-Prolog Changelog since version 8.3.17

- FIXED: Make lazy monotonic tabling using answer subsumption avoid  
fully invalidating indirect dependencies and keep using the lazy  
monotonic reevaluation.

- FIXED: Lazy monotonic predicate depending on two nodes may fail to  
be updated if the first node has no new answers.

- FIXED: Various small issues that allow using []/N (notably []/3)  
as a predicate. After report by Rick Workman.

- ADDED: Undocumented way to define new functions. Experimental.

- FIXED: Like monotonic dynamic predicates, avoid monotonic tabled  
predicates to shift a dependency if there is no innermost monotonic  
tabled predicate.

- FIXED: A monotonic table that was invalidated twice including a  
retract could be re-evaluated twice, first as normal incremental  
predicate and later as monotonic predicate. This could re-validate  
an affected node twice.

- FIXED: Nest re-evaluation of an invalidated monotonic table (lazy or  
due to a retract).

- ENHANCED: Speedup generation of _false paths_ for incremental tabling  
by only reporting one edge to a dynamic or complete node of the IDG  
and merge fetching the edge and getting the status.

- DOC: Deprecate current\_stream/3. Patch by David Tonhofer.

- DOC: sub\_string/5: clarify type handling on input and output.

- DOC: Unified descriptions of sub\_atom/5 and sub\_string/5

- DOC: Removed erroneous markup

- DOC: Reviewed length/2 description

- DOC: Remove reference to -L, -G and -T options.

- FIXED: Issue#767: print\_term/2 for printing zero-argument compounds.  
Wouter Beek.

- FIXED: current\_table/2 for shared tables.

- FIXED: Possible crash when creating a dict from a list if the list  
contains an invalid key.

- FIXED: Issue#766: debug portray for continuations in boot/tabling.pl  
prevents printing zero-arity compounds. Wouter Beek.

- MODIFIED: Renamed mapterm/3 into mapargs/3 after discussion on  
Discourse.

- ADDED: Allow monotonic tables to depend on incremental dynamic  
predicates. As a result, a change to an incremental dependent  
invalidates the monotonic table.

- ENHANCED: A dynamic monotonic predicate should only try to capture  
the continuation if the inner dependency is monotonically tabled.

## Package clib

- ADDED: process\_create/3: SICStus 4 compatible pipe(Pipe,Options)  
option supporting type(Type) and encoding(Encoding).
