Skip to content

v0.6.0

Choose a tag to compare

@takeokunn takeokunn released this 19 Jul 05:06
v0.6.0
b3049ad

Highlights

Correctness

  • Parsed finite-domain ranges finally work: X in 1..5 was rejected by the finite-domain store (only the Lisp-shaped infix range form worked); both shapes are now accepted
  • Quoted ?-prefixed atoms such as '?x' are real atoms instead of being misread as logic variables
  • ISO-conformant goal dispatch: instantiation_error for variable goals, type_error for non-callable or improper goals
  • Closing the selected current_input/current_output stream resets the selection to user_input/user_output
  • member/2/append/3 terminate on cyclic lists; cyclic consult/load_files source lists raise a resource error; . inside {...} no longer splits a clause early

Resource hardening

  • New exported parser resource limits (source size, tokens, depth, lexeme lengths, interned-symbol budget) with a prolog-parser-resource-error condition surfaced as catchable ISO resource_error/1
  • Untrusted input no longer permanently interns symbols (syntax errors, missing paths, stream handles, operator specifiers, arithmetic keys); exponentiation is bounded

Performance

  • Hash-indexed unification environments; iterative, cycle-safe substitution
  • O(1) assertz and tabled-answer deduplication; SCC-based left-recursion detection
  • O(n log n) bagof/setof grouping; augmenting-path all_different

Documentation

  • Install/run instructions match reality (ASDF workflow; not on Quicklisp), complete exported-symbol API reference, accurate phrase/unify contracts, explicit Linux-only flake outputs, concrete security-reporting and code-of-conduct procedures

Full changelog: https://github.com/takeokunn/cl-prolog/blob/main/CHANGELOG.md