# Prolog Improvements Forum - PIPS

**URL:** https://discourse.prolog-lang.org/c/improvements-forum/6.md

[Latest](https://discourse.prolog-lang.org/latest.md) · [Categories](https://discourse.prolog-lang.org/categories.md) · [Tags](https://discourse.prolog-lang.org/tags.md)

---

## [About the Prolog Improvements Forum - PIPS category](https://discourse.prolog-lang.org/t/about-the-prolog-improvements-forum-pips-category/17)

<div class="topic-metadata">

**Author:** [@herme](https://discourse.prolog-lang.org/u/herme)\
**Replies:** 0\
**Last updated:** [April 30, 2024, 2:26pm UTC](https://discourse.prolog-lang.org/t/about-the-prolog-improvements-forum-pips-category/17 "2024-04-30T14:26:51Z")

</div>

The Prolog Improvements Forum (PIPs) Discussions related to Prolog Features and Implementation and PIPs within the Prolog community. This category hosts discussions on improvements to the Prolog language and its impl…

---

## [Some thoughts about a test framework for PIPS](https://discourse.prolog-lang.org/t/some-thoughts-about-a-test-framework-for-pips/108)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 10\
**Last updated:** [May 4, 2026, 6:47pm UTC](https://discourse.prolog-lang.org/t/some-thoughts-about-a-test-framework-for-pips/108 "2026-05-04T18:47:27Z")

</div>

I had a little look into testing. I think there are two basic approaches XSB A test is a Prolog file with some main goal. The test driver (a shell script) runs Prolog, loads the file and runs the main goal. Tha…

---

## [Float enhancements stalled?](https://discourse.prolog-lang.org/t/float-enhancements-stalled/183)

<div class="topic-metadata">

**Author:** [@j4n\_bur53](https://discourse.prolog-lang.org/u/j4n_bur53)\
**Replies:** 4\
**Last updated:** [March 24, 2026, 1:00pm UTC](https://discourse.prolog-lang.org/t/float-enhancements-stalled/183 "2026-03-24T13:00:51Z")

</div>

Hi, Somehow this link is broken ( Not Found ): 0106.0 Float enhancements Draft https://prolog-lang.org/ImprovementsForum/0106-floats-enhancements.html Also there is no consensus between ECLiPSe and SWI in realizati…

---

## [Column (type) specifiers](https://discourse.prolog-lang.org/t/column-type-specifiers/182)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 0\
**Last updated:** [February 27, 2026, 1:10pm UTC](https://discourse.prolog-lang.org/t/column-type-specifiers/182 "2026-02-27T13:10:17Z")

</div>

I had a look at XSB’s CSV handling predicates, notably load\_csv/2 and load\_dsv/3. The idea was to have a look which of this functionality would fit SWI-Prolog’s CSV reader nicely. The obvious candidate that also came …

---

## [Subgraph Isomorphism: Prolog vs. Conventional](https://discourse.prolog-lang.org/t/subgraph-isomorphism-prolog-vs-conventional/173)

<div class="topic-metadata">

**Author:** [@Bob\_Kowalski](https://discourse.prolog-lang.org/u/Bob_Kowalski)\
**Replies:** 6\
**Last updated:** [November 26, 2025, 8:57am UTC](https://discourse.prolog-lang.org/t/subgraph-isomorphism-prolog-vs-conventional/173 "2025-11-26T08:57:01Z")

</div>

This paper has just been published on ArXiv: https://arxiv.org/pdf/2511.13600. Here are some quotes from the paper: “This project utilizes the logic language Prolog to define rules that represent particular patterns an…

---

## [Comments on format tests](https://discourse.prolog-lang.org/t/comments-on-format-tests/171)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 16\
**Last updated:** [November 25, 2025, 10:35pm UTC](https://discourse.prolog-lang.org/t/comments-on-format-tests/171 "2025-11-25T22:35:17Z")

</div>

Thanks for the tests, @jschimpf. I added support for expressions for \*. That reduces the failures from 10 to 5. Also restricted ~a to atoms and strings, leaving 4 discrepancies. Now it gets interesting. format('…

---

## [Progress notes on text\_max](https://discourse.prolog-lang.org/t/progress-notes-on-text-max/172)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 3\
**Last updated:** [November 24, 2025, 1:16pm UTC](https://discourse.prolog-lang.org/t/progress-notes-on-text-max/172 "2025-11-24T13:16:01Z")

</div>

I have implemented portable(true), max\_text(+Length)andtruncated(-Bool)\`. Some remarks: I renamed text\_max(+Length) to max\_text(+Length) because all Prolog options and flags are max\_\*. Will be renamed to whatever t…

---

## [Draft PIP-0110-format](https://discourse.prolog-lang.org/t/draft-pip-0110-format/170)

<div class="topic-metadata">

**Author:** [@jschimpf](https://discourse.prolog-lang.org/u/jschimpf)\
**Replies:** 0\
**Last updated:** [November 6, 2025, 2:32am UTC](https://discourse.prolog-lang.org/t/draft-pip-0110-format/170 "2025-11-06T02:32:52Z")

</div>

Drafting and testing for PIP-0110 for format/2,3 threw up quite a number of inconsistencies between implementations. Here is a list of issues, together with my suggestion for how to resolve the issue in the PIP. Please c…

---

## [X{Attrs} syntax](https://discourse.prolog-lang.org/t/x-attrs-syntax/164)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 9\
**Last updated:** [October 6, 2025, 12:23pm UTC](https://discourse.prolog-lang.org/t/x-attrs-syntax/164 "2025-10-06T12:23:55Z")

</div>

Somewhat related. @jschimpf, you are using X{attr1:V1, …} to read attributed variables. What does that mean if a variable already has attributes. E.g., ?- write(X{a:1}), write(X{b:2}). And also if there are differe…

---

## [Experiences with argnames/struct](https://discourse.prolog-lang.org/t/experiences-with-argnames-struct/147)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 5\
**Last updated:** [April 9, 2025, 2:32pm UTC](https://discourse.prolog-lang.org/t/experiences-with-argnames-struct/147 "2025-04-09T14:32:07Z")

</div>

Following the ongoing discussion on “static dicts”, aka Ciao argnames or ECLiPSe “structs”, I have implemented most of it in a branch GitHub - SWI-Prolog/swipl-devel at argnames Here are some experience that is hopefull…

---

## [Anonymous dictionaries](https://discourse.prolog-lang.org/t/anonymous-dictionaries/143)

<div class="topic-metadata">

**Author:** [@jfmc](https://discourse.prolog-lang.org/u/jfmc)\
**Replies:** 0\
**Last updated:** [February 25, 2025, 5:38pm UTC](https://discourse.prolog-lang.org/t/anonymous-dictionaries/143 "2025-02-25T17:38:16Z")

</div>

Hi all! The proposal for dictionaries (based mostly on SWI’s dictionaries other proposals for records, like Ciao’s argnames) introduce the syntax tag{k1:v1, ..., kn:vn}. It still needs to be decided if this is a new cla…

---

## [Printing cyclic terms](https://discourse.prolog-lang.org/t/printing-cyclic-terms/142)

<div class="topic-metadata">

**Author:** [@jschimpf](https://discourse.prolog-lang.org/u/jschimpf)\
**Replies:** 0\
**Last updated:** [February 20, 2025, 12:13am UTC](https://discourse.prolog-lang.org/t/printing-cyclic-terms/142 "2025-02-20T00:13:24Z")

</div>

I’d like to suggest a new way for printing cyclic terms. Some systems (e.g. SICStus, SWI), support representing cyclic terms in output as follows ?- X=f(Y), Y=g(Y), write\_term(X,\[\]). @(f(\_123),\[\_123=g(\_123)\]) Here, th…

---

## [Variable writing](https://discourse.prolog-lang.org/t/variable-writing/102)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 3\
**Last updated:** [February 19, 2025, 11:41pm UTC](https://discourse.prolog-lang.org/t/variable-writing/102 "2025-02-19T23:41:33Z")

</div>

Possibly related, I’m wondering what people think about writing variables by write\_term/2,3. We have the ISO extension variable\_names(+List) and numbervars(+Bool). SWI-Prolog’s numbervars implies the SP legacy\_number…

---

## [Hilog in XSB, Ciao, etc](https://discourse.prolog-lang.org/t/hilog-in-xsb-ciao-etc/141)

<div class="topic-metadata">

**Author:** [@David\_Warren](https://discourse.prolog-lang.org/u/David_Warren)\
**Replies:** 7\
**Last updated:** [February 18, 2025, 9:40am UTC](https://discourse.prolog-lang.org/t/hilog-in-xsb-ciao-etc/141 "2025-02-18T09:40:59Z")

</div>

We had an interesting discussion oi Hilog syntax and semantics this morning. I’d like to summarize what I understood. Syntax issues: XSB extends Prolog term syntax to allow the functor position to be an arbitrary (hil…

---

## [Different usage contexts of mode indicators, and the '-' mode](https://discourse.prolog-lang.org/t/different-usage-contexts-of-mode-indicators-and-the-mode/138)

<div class="topic-metadata">

**Author:** [@jschimpf](https://discourse.prolog-lang.org/u/jschimpf)\
**Replies:** 11\
**Last updated:** [February 6, 2025, 2:30pm UTC](https://discourse.prolog-lang.org/t/different-usage-contexts-of-mode-indicators-and-the-mode/138 "2025-02-06T14:30:06Z")

</div>

Further to our recent discussions, I wanted to concretise a point I was trying to make. I can see 3 different contexts in which we want to use +/-/? mode indicators: Descriptive mode alternatives: these are provided b…

---

## [Format/2-3 and term write depth](https://discourse.prolog-lang.org/t/format-2-3-and-term-write-depth/106)

<div class="topic-metadata">

**Author:** [@pmoura](https://discourse.prolog-lang.org/u/pmoura)\
**Replies:** 10\
**Last updated:** [December 5, 2024, 2:49pm UTC](https://discourse.prolog-lang.org/t/format-2-3-and-term-write-depth/106 "2024-12-05T14:49:35Z")

</div>

From Permion’s XVM Prolog implementation. We extended the format/2-3 predicates to allow specifying the term write depth. This extension is compatible with the de facto standard definition of these predicates. From the …

---

## [Max\_arity limits](https://discourse.prolog-lang.org/t/max-arity-limits/121)

<div class="topic-metadata">

**Author:** [@jfmc](https://discourse.prolog-lang.org/u/jfmc)\
**Replies:** 5\
**Last updated:** [November 24, 2024, 5:58pm UTC](https://discourse.prolog-lang.org/t/max-arity-limits/121 "2024-11-24T17:58:04Z")

</div>

Hi all. Looking at portability - The smallest \`max\_arity\` of compound terms in ISO Prolog programs - Stack Overflow I found an interesting comment: There is a gap somehow. max\_arity only covers the compound size. But t…

---

## [More SWI-Prolog options that may be worth considering](https://discourse.prolog-lang.org/t/more-swi-prolog-options-that-may-be-worth-considering/101)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 4\
**Last updated:** [November 20, 2024, 3:11pm UTC](https://discourse.prolog-lang.org/t/more-swi-prolog-options-that-may-be-worth-considering/101 "2024-11-20T15:11:23Z")

</div>

Thanks for the nice list of options. I examined by list at write\_term/2. Some of the stuff is of no general interest, but some might be. Notably module(+Module) Should possibly/probably be handled differently, bu…

---

## [About the radix option (and a little about float write options)](https://discourse.prolog-lang.org/t/about-the-radix-option-and-a-little-about-float-write-options/103)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 5\
**Last updated:** [November 17, 2024, 11:34pm UTC](https://discourse.prolog-lang.org/t/about-the-radix-option-and-a-little-about-float-write-options/103 "2024-11-17T23:34:00Z")

</div>

I had a look at the radix(+Radix) option of XSB. I also has a closer look at SICStus float\_format(+Format). Actually implementing this stuff makes you more aware of the issues :slight\_smile: Dealing with Radix looked…

---

## [Handling exceptions based on predicate based classification](https://discourse.prolog-lang.org/t/handling-exceptions-based-on-predicate-based-classification/91)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 0\
**Last updated:** [October 6, 2024, 2:48pm UTC](https://discourse.prolog-lang.org/t/handling-exceptions-based-on-predicate-based-classification/91 "2024-10-06T14:48:50Z")

</div>

Somewhat related to Using exceptions for "getting out", and after a remark by @jfm, I came up with a library that in my view solves most of the pressing issues with exceptions. \[@jfmc , could you allow for .pl files as …

---

## [Using exceptions for "getting out"](https://discourse.prolog-lang.org/t/using-exceptions-for-getting-out/89)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 2\
**Last updated:** [October 2, 2024, 6:56am UTC](https://discourse.prolog-lang.org/t/using-exceptions-for-getting-out/89 "2024-10-02T06:56:43Z")

</div>

ISO defines exceptions to have the shape error(Formal, ImplDefined). Users can throw any term using throw/1, except for a variable. In the good old days, before threads, SWI-Prolog implemented e.g., abort/0 by simply …

---

## [Unary and binary modes?](https://discourse.prolog-lang.org/t/unary-and-binary-modes/84)

<div class="topic-metadata">

**Author:** [@JanWielemaker](https://discourse.prolog-lang.org/u/JanWielemaker)\
**Replies:** 1\
**Last updated:** [September 13, 2024, 11:46am UTC](https://discourse.prolog-lang.org/t/unary-and-binary-modes/84 "2024-09-13T11:46:30Z")

</div>

@herme, thanks for the writeup. Your ideas are closer to mine than I expected :slight\_smile: I’m a bit confused about unary and binary though as you write the unary without an argument and the binary with a single (type…
