eyeprolog 1.0.4 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -8
- package/conformance-report.md +4 -3
- package/examples/age.pl +2 -0
- package/examples/aliases-and-namespaces.pl +2 -0
- package/examples/allen-interval-calculus.pl +2 -0
- package/examples/binomial-vandermonde.pl +2 -0
- package/examples/blocks-world-planning.pl +2 -0
- package/examples/book/README.md +2 -1
- package/examples/book/chapter-02/02-measurement.pl +3 -0
- package/examples/book/chapter-03/01-eligible.pl +3 -0
- package/examples/book/chapter-03/02-adult.pl +3 -0
- package/examples/book/chapter-04/02-path.pl +3 -0
- package/examples/book/chapter-06/01-next.pl +3 -0
- package/examples/book/chapter-06/03-square.pl +3 -0
- package/examples/book/chapter-08/01-findall.pl +3 -0
- package/examples/book/chapter-08/02-outgoing_costs.pl +3 -0
- package/examples/book/chapter-08/03-best_route.pl +3 -0
- package/examples/book/chapter-09/02-normalized.pl +3 -0
- package/examples/book/chapter-09/03-message.pl +3 -0
- package/examples/book/chapter-10/02-plan.pl +3 -0
- package/examples/book/chapter-11/01-why.pl +3 -0
- package/examples/book/chapter-17/01-path.pl +3 -0
- package/examples/book/chapter-17/02-adult.pl +3 -0
- package/examples/book/chapter-17/03-bad_member.pl +3 -0
- package/examples/book/chapter-18/01-routeable.pl +3 -0
- package/examples/book/chapter-18/02-routeable-2.pl +3 -0
- package/examples/book/chapter-21/03-loop_edge.pl +3 -0
- package/examples/book/chapter-21/04-eligible.pl +3 -0
- package/examples/book/chapter-22/02-tree_member.pl +3 -0
- package/examples/book/chapter-22/04-sentence.pl +10 -14
- package/examples/book/chapter-22/06-lookup.pl +3 -0
- package/examples/book/chapter-23/01-adult.pl +3 -0
- package/examples/book/chapter-23/02-adult-2.pl +3 -0
- package/examples/book/chapter-23/03-can_board.pl +3 -0
- package/examples/book/chapter-23/04-traveler_in_good_standing.pl +3 -0
- package/examples/book/chapter-24/02-simple_path.pl +3 -0
- package/examples/book/chapter-24/03-reachable.pl +3 -0
- package/examples/book/chapter-24/04-best_plan.pl +3 -0
- package/examples/book/chapter-25/01-person.pl +3 -0
- package/examples/book/chapter-25/02-active_badge.pl +3 -0
- package/examples/book/chapter-25/04-permit.pl +3 -0
- package/examples/book/chapter-26/02-triple.pl +3 -0
- package/examples/book/chapter-26/03-triple-2.pl +3 -0
- package/examples/book/chapter-26/04-edge.pl +3 -0
- package/examples/book/chapter-27/02-list_length.pl +3 -0
- package/examples/book/chapter-28/02-triangle.pl +3 -0
- package/examples/book/chapter-28/03-rectangle.pl +3 -0
- package/examples/book/chapter-28/04-integer_rectangle.pl +3 -0
- package/examples/book/chapter-28/05-preserves_combine.pl +3 -0
- package/examples/book/chapter-29/01-counterexample_to_odd_square.pl +3 -0
- package/examples/book/chapter-31/01-edge.pl +3 -0
- package/examples/book/chapter-31/03-double.pl +3 -0
- package/examples/book/chapter-32/01-eligible.pl +3 -0
- package/examples/book/chapter-32/02-eligible-2.pl +3 -0
- package/examples/book/chapter-32/03-candidate_debug.pl +3 -0
- package/examples/book/chapter-32/04-reference_square.pl +3 -0
- package/examples/book/chapter-33/01-assigned_badge.pl +3 -0
- package/examples/book/chapter-33/02-source_role.pl +3 -0
- package/examples/book/chapter-33/03-chosen_pair.pl +3 -0
- package/examples/book/chapter-33/04-path.pl +3 -0
- package/examples/book/chapter-33/09-invalid_badge_assignment.pl +3 -0
- package/examples/book/chapter-34/03-regional_total.pl +3 -0
- package/examples/book/chapter-38/01-city.pl +3 -0
- package/examples/book/chapter-38/02-look_ahead.pl +2 -0
- package/examples/book/chapter-39/01-answer.pl +3 -0
- package/examples/book/chapter-39/02-answer-2.pl +3 -0
- package/examples/book/chapter-39/03-answer-3.pl +3 -0
- package/examples/book/chapter-39/04-cost.pl +3 -0
- package/examples/book/chapter-39/05-message.pl +3 -0
- package/examples/catalan-convolution.pl +2 -0
- package/examples/cdcl-sat-solver.pl +2 -0
- package/examples/chart-parser.pl +2 -0
- package/examples/collatz-1000.pl +2 -0
- package/examples/combinatorics-findall-sort.pl +2 -0
- package/examples/context-schema-audit.pl +2 -0
- package/examples/continued-fraction-sqrt2.pl +2 -0
- package/examples/critical-path-schedule.pl +2 -0
- package/examples/d3-group.pl +2 -0
- package/examples/data-negotiation.pl +2 -0
- package/examples/dcg-command-parser.pl +26 -0
- package/examples/delfour.pl +3 -0
- package/examples/dijkstra-findall-sort.pl +2 -0
- package/examples/dijkstra.pl +2 -0
- package/examples/dog.pl +2 -0
- package/examples/donald-gerald-robert.pl +2 -0
- package/examples/drone-corridor-planner.pl +2 -0
- package/examples/easter-computus.pl +2 -0
- package/examples/enigma1225.pl +3 -0
- package/examples/equality-saturation.pl +3 -0
- package/examples/eulerian-path.pl +2 -0
- package/examples/flandor.pl +2 -0
- package/examples/four-color-map.pl +2 -0
- package/examples/fundamental-theorem-arithmetic.pl +4 -1
- package/examples/goldbach.pl +2 -0
- package/examples/gps.pl +2 -0
- package/examples/graph-reachability.pl +2 -0
- package/examples/hamiltonian-path.pl +2 -0
- package/examples/hanoi.pl +2 -0
- package/examples/integer-partitions.pl +2 -0
- package/examples/job-shop-scheduling.pl +3 -0
- package/examples/knapsack-optimization.pl +3 -0
- package/examples/knuth-bendix-completion.pl +2 -0
- package/examples/lee.pl +2 -0
- package/examples/linear-logic-resources.pl +2 -0
- package/examples/list-collection.pl +2 -0
- package/examples/map-four-color-search.pl +2 -0
- package/examples/markov-logic-network.pl +2 -0
- package/examples/matrix-chain-order.pl +3 -0
- package/examples/missionaries-cannibals.pl +3 -0
- package/examples/monkey-bananas.pl +2 -0
- package/examples/n-queens.pl +2 -0
- package/examples/observability-log-correlation.pl +2 -0
- package/examples/output/dcg-command-parser.pl +4 -0
- package/examples/path-discovery.pl +3 -0
- package/examples/pell-equation.pl +2 -0
- package/examples/polynomial.pl +3 -0
- package/examples/prime-range.pl +3 -0
- package/examples/proof/iso-dynamic-database.pl +1 -1
- package/examples/quine-mccluskey.pl +2 -0
- package/examples/register-allocation.pl +3 -0
- package/examples/reusable-builtins.pl +3 -0
- package/examples/sat-solver-dpll.pl +3 -0
- package/examples/send-more-money.pl +2 -0
- package/examples/stable-marriage.pl +2 -0
- package/examples/statistics-summary.pl +2 -0
- package/examples/stirling-bell-numbers.pl +2 -0
- package/examples/sudoku.pl +3 -0
- package/examples/term-tools.pl +2 -0
- package/examples/totient-summatory.pl +3 -0
- package/examples/truth-maintenance-system.pl +2 -0
- package/examples/turing.pl +2 -0
- package/examples/uuid.pl +3 -0
- package/examples/weighted-interval-scheduling.pl +3 -0
- package/examples/wolf-goat-cabbage.pl +2 -0
- package/examples/zebra.pl +2 -0
- package/index.d.ts +7 -3
- package/package.json +1 -1
- package/playground.html +1 -0
- package/src/cli.js +1 -1
- package/src/dcg.js +241 -0
- package/src/explain.js +5 -5
- package/src/index.js +3 -3
- package/src/iso.js +56 -9
- package/src/{eyeprolog-library.pl → lib/eyeprolog.pl} +37 -2
- package/src/lib/lists.pl +94 -0
- package/src/parser.js +34 -5
- package/src/program.js +241 -42
- package/src/solver.js +45 -9
- package/src/standard-library.js +60 -0
- package/src/term.js +18 -6
- package/test/conformance/ISO-MATRIX.md +3 -1
- package/test/conformance/README.md +6 -4
- package/test/conformance/cases/iso/cut_disjunction_scope.pl +5 -0
- package/test/conformance/cases/iso/dcg_call_phrase_semicontext.pl +12 -0
- package/test/conformance/cases/iso/dcg_control_constructs.pl +12 -0
- package/test/conformance/cases/iso/dcg_module_nonterminal_indicator.pl +8 -0
- package/test/conformance/cases/iso/dcg_terminals_and_remainder.pl +8 -0
- package/test/conformance/cases/modules/qualified_call.pl +6 -0
- package/test/conformance/cases/modules/selective_library_import.pl +5 -0
- package/test/conformance/errors/iso/dcg_phrase_bad_input.pl +1 -0
- package/test/conformance/errors/iso/dcg_phrase_bad_output.pl +1 -0
- package/test/conformance/errors/iso/dcg_phrase_noncallable.pl +1 -0
- package/test/conformance/errors/iso/dcg_phrase_variable.pl +1 -0
- package/test/conformance/expected/iso/cut_disjunction_scope.pl +2 -0
- package/test/conformance/expected/iso/dcg_call_phrase_semicontext.pl +4 -0
- package/test/conformance/expected/iso/dcg_control_constructs.pl +6 -0
- package/test/conformance/expected/iso/dcg_module_nonterminal_indicator.pl +2 -0
- package/test/conformance/expected/iso/dcg_terminals_and_remainder.pl +2 -0
- package/test/conformance/expected/modules/qualified_call.pl +1 -0
- package/test/conformance/expected/modules/selective_library_import.pl +1 -0
- package/test/conformance/expected-errors/iso/dcg_phrase_bad_input.txt +1 -0
- package/test/conformance/expected-errors/iso/dcg_phrase_bad_output.txt +1 -0
- package/test/conformance/expected-errors/iso/dcg_phrase_noncallable.txt +1 -0
- package/test/conformance/expected-errors/iso/dcg_phrase_variable.txt +1 -0
- package/test/run-conformance.mjs +10 -4
- package/test/run-playground.mjs +7 -7
- package/test/run-regression.mjs +79 -26
- package/the-art-of-eyeprolog.md +350 -90
- package/tools/extract-book-examples.mjs +2 -2
- package/why-eyeprolog.md +10 -5
- package/src/eyeprolog-autoload.js +0 -127
- package/src/eyeprolog-common-library.pl +0 -44
- package/test/conformance/errors/syntax/colon_name_rejected.pl +0 -1
- package/test/conformance/errors/syntax/unquoted_colon_predicate.pl +0 -1
- package/test/conformance/expected-errors/syntax/colon_name_rejected.txt +0 -1
- package/test/conformance/expected-errors/syntax/unquoted_colon_predicate.txt +0 -1
package/README.md
CHANGED
|
@@ -33,14 +33,24 @@ Programs may declare their default queries with `%% goal:` comments.
|
|
|
33
33
|
Double-quoted text follows the ISO `double_quotes` flag and defaults to a
|
|
34
34
|
proper list of one-character atoms (`chars`), matching Trealla and Scryer.
|
|
35
35
|
|
|
36
|
-
##
|
|
37
|
-
|
|
38
|
-
EyeProlog
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
## ISO modules and definite clause grammars
|
|
37
|
+
|
|
38
|
+
EyeProlog implements ISO/IEC 13211-2 modules and the grammar rules and
|
|
39
|
+
`phrase/2-3` predicates of ISO/IEC TS 13211-3:2025. For example:
|
|
40
|
+
|
|
41
|
+
```prolog
|
|
42
|
+
sentence --> [hello], noun.
|
|
43
|
+
noun --> [world] | [prolog].
|
|
44
|
+
|
|
45
|
+
%% goal: phrase(sentence, Words)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
EyeProlog also adds 44 public library predicates to its 129-entry ISO registry.
|
|
49
|
+
**All 44 are ordinary Prolog clauses** in `src/lib/eyeprolog.pl` and
|
|
50
|
+
`src/lib/lists.pl`. They are ISO/IEC 13211-2 modules, loaded explicitly with
|
|
51
|
+
`use_module(library(eyeprolog))` or `use_module(library(lists))`, following the
|
|
52
|
+
layout used by Scryer Prolog. None requires host support. Portable text
|
|
53
|
+
predicates use ISO atoms or character lists.
|
|
44
54
|
|
|
45
55
|
## Development
|
|
46
56
|
|
package/conformance-report.md
CHANGED
|
@@ -11,15 +11,16 @@ This report summarizes the file-based conformance corpus under `test/conformance
|
|
|
11
11
|
| builtins | 11 | 0 | 0 | 0 | 11 |
|
|
12
12
|
| context | 11 | 0 | 0 | 0 | 11 |
|
|
13
13
|
| control | 15 | 0 | 0 | 0 | 15 |
|
|
14
|
-
| iso |
|
|
14
|
+
| iso | 135 | 178 | 0 | 0 | 313 |
|
|
15
15
|
| lists | 52 | 3 | 0 | 0 | 55 |
|
|
16
|
+
| modules | 2 | 0 | 0 | 0 | 2 |
|
|
16
17
|
| negation | 8 | 0 | 19 | 0 | 27 |
|
|
17
18
|
| proofs | 0 | 0 | 0 | 21 | 21 |
|
|
18
19
|
| query | 8 | 2 | 0 | 0 | 10 |
|
|
19
20
|
| rules | 13 | 3 | 0 | 0 | 16 |
|
|
20
21
|
| strings | 40 | 0 | 0 | 0 | 40 |
|
|
21
|
-
| syntax | 12 |
|
|
22
|
+
| syntax | 12 | 23 | 0 | 0 | 35 |
|
|
22
23
|
| terms | 26 | 3 | 0 | 0 | 29 |
|
|
23
24
|
| unification | 18 | 0 | 0 | 0 | 18 |
|
|
24
25
|
| variables | 16 | 9 | 0 | 0 | 25 |
|
|
25
|
-
| **Total** | **
|
|
26
|
+
| **Total** | **450** | **229** | **19** | **21** | **719** |
|
package/examples/age.pl
CHANGED
package/examples/book/README.md
CHANGED
|
@@ -127,7 +127,7 @@ npm run generate
|
|
|
127
127
|
- [01-tree.pl](chapter-22/01-tree.pl)
|
|
128
128
|
- [02-tree_member.pl](chapter-22/02-tree_member.pl)
|
|
129
129
|
- [03-mirror.pl](chapter-22/03-mirror.pl) — Transforming a tree
|
|
130
|
-
- [04-sentence.pl](chapter-22/04-sentence.pl) — A
|
|
130
|
+
- [04-sentence.pl](chapter-22/04-sentence.pl) — A standard definite clause grammar
|
|
131
131
|
- [05-evaluate.pl](chapter-22/05-evaluate.pl) — Interpreting an expression
|
|
132
132
|
- [06-lookup.pl](chapter-22/06-lookup.pl)
|
|
133
133
|
- [07-simplify.pl](chapter-22/07-simplify.pl) — Rewriting symbolic expressions
|
|
@@ -233,6 +233,7 @@ npm run generate
|
|
|
233
233
|
## Chapter 38: Language and ISO profile
|
|
234
234
|
|
|
235
235
|
- [01-city.pl](chapter-38/01-city.pl)
|
|
236
|
+
- [02-look_ahead.pl](chapter-38/02-look_ahead.pl) — ISO Part 3 definite clause grammars
|
|
236
237
|
|
|
237
238
|
## Chapter 39: Built-in predicates by programming role
|
|
238
239
|
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
% From The Art of EyeProlog, Chapter 17 — The same relation, a different computation.
|
|
2
|
+
:- use_module(library(eyeprolog)).
|
|
3
|
+
:- use_module(library(lists)).
|
|
4
|
+
|
|
2
5
|
adult(Person) :- person(Person), age(Person, Age), (Age >= 18).
|
|
3
6
|
|
|
4
7
|
adult(Person) :- (Age >= 18), age(Person, Age), person(Person).
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
% From The Art of EyeProlog, Chapter 22 — A
|
|
2
|
-
sentence
|
|
3
|
-
noun_phrase(Input, AfterNoun),
|
|
4
|
-
verb_phrase(AfterNoun, Rest).
|
|
1
|
+
% From The Art of EyeProlog, Chapter 22 — A standard definite clause grammar.
|
|
2
|
+
sentence --> noun_phrase, verb_phrase.
|
|
5
3
|
|
|
6
|
-
noun_phrase
|
|
7
|
-
noun_phrase
|
|
4
|
+
noun_phrase --> [the], noun.
|
|
5
|
+
noun_phrase --> [a], noun.
|
|
8
6
|
|
|
9
|
-
noun
|
|
10
|
-
noun
|
|
7
|
+
noun --> [robot].
|
|
8
|
+
noun --> [scientist].
|
|
11
9
|
|
|
12
|
-
verb_phrase
|
|
13
|
-
verb(Input, AfterVerb),
|
|
14
|
-
noun_phrase(AfterVerb, Rest).
|
|
10
|
+
verb_phrase --> verb, noun_phrase.
|
|
15
11
|
|
|
16
|
-
verb
|
|
17
|
-
verb
|
|
12
|
+
verb --> [helps].
|
|
13
|
+
verb --> [observes].
|
|
18
14
|
|
|
19
|
-
complete_sentence(Words) :- sentence
|
|
15
|
+
complete_sentence(Words) :- phrase(sentence, Words).
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
% From The Art of EyeProlog, Chapter 24 — Existence, one witness, and all witnesses.
|
|
2
|
+
:- use_module(library(eyeprolog)).
|
|
3
|
+
:- use_module(library(lists)).
|
|
4
|
+
|
|
2
5
|
reachable(From, To).
|
|
3
6
|
once(simple_path(From, To, Path)).
|
|
4
7
|
findall(Path, simple_path(From, To, Path), Paths).
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
% From The Art of EyeProlog, Chapter 33 — Pattern 9: Integrity before inference.
|
|
2
|
+
:- use_module(library(eyeprolog)).
|
|
3
|
+
:- use_module(library(lists)).
|
|
4
|
+
|
|
2
5
|
invalid_badge_assignment(Badge, PersonA, PersonB) :-
|
|
3
6
|
assigned_badge(PersonA, Badge),
|
|
4
7
|
assigned_badge(PersonB, Badge),
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
% From The Art of EyeProlog, Chapter 39 — The EyeProlog library.
|
|
2
|
+
:- use_module(library(eyeprolog)).
|
|
3
|
+
:- use_module(library(lists)).
|
|
4
|
+
|
|
2
5
|
answer(square, S) :- (S is 12 * 12).
|
|
3
6
|
answer(day_count, N) :- between(3, 5, N).
|
|
4
7
|
answer(age, D) :- difference('2026-07-28', '2020-05-20', D).
|