Skip to content

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 20:10
· 24 commits to main since this release

Fixed

  • GreymereAdventure reports malformed command input and prompts again instead of exiting
    with an uncaught syntax error, preserving inventory and quest progress.
  • writeq/1 and print/1 bracket as Corrigendum 3 requires, so their output reads back in either
    mode. An atom that is an operator stands bare as an argument or list element ([:-,-],
    [',']) and is bracketed as an operand ((-)-(-), (*)=(*)). A prefix - brackets a
    non-negative number or an infix or postfix operand: - (1) and - (1^2), which were written
    - 1 and - 1^2. A left operand is bracketed where its operator would take the next one as its
    operand ((fy 1)yf), , and | are bare as operators, '/*' is quoted, and adjacent quoted
    names and a 0 before a quoted name are spaced apart (' op' '1', 0 'f ').
  • The reader reads 0''1 as 0 '' 1, and 0' before a line continuation as 0 followed by a
    quoted atom, since no character code follows; 0xor 2, 0bop 2, and 0o8 as 0 followed by a
    name; and [ ](X) as a compound whose functor is []. These were syntax errors.
  • The \d and \o escapes are syntax errors in both modes, as in ISO and SWI-Prolog; before,
    number_chars(N, "0'\\o0\\") answered 0. Octal is written \101\.

Changed

  • GreymereAdventure now explores seventeen rooms with a bell puzzle, an optional prisoner
    rescue, herbal crafting, a peaceful knight encounter, and a charged boss attack with guarding.
    A quest journal, exploration map, new illustrations, and two scripted winning routes accompany
    the expanded story and its choice-dependent endings.
  • Fused direct IL uses clause chains for unbound first arguments, avoiding indexed retry overhead.
    The alternate entries share existing head blocks; bound calls retain first-argument indexing.
  • Direct IL predicates use first-argument clause indexing, preserving solution order while
    skipping incompatible heads and avoiding a choice point when only one clause can match.
    Installation remains compatible with earlier IL images.
  • The direct IL compiler groups straight-line operations into fewer methods, reducing dispatch
    overhead and generated assembly size. Calls, wake-up checks, and control-flow targets preserve
    their existing resumption behavior.
  • +1 reads as +(1) in both modes, as Corrigendum 2 specifies and SWI-Prolog reads it, rather
    than as the integer 1.
  • StrictIso reads as the standard does where it and SWI-Prolog disagree: - 1, '-'1, and
    - /* c */ 1 are the integer −1; an atom that is an operator needs brackets to be an operand, so
    X = - is a syntax error there; and a back quoted string is a syntax error. \e is an escape
    only in Modern, which keeps SWI-Prolog's reading of all of these.