]> Repositorios git - scryer-prolog.git/commitdiff
ENHANCED: support quads in included files
authorMarkus Triska <[email protected]>
Sat, 7 Mar 2026 08:37:30 +0000 (09:37 +0100)
committerMarkus Triska <[email protected]>
Sat, 7 Mar 2026 08:37:30 +0000 (09:37 +0100)
Suggested by @dcnorris, many thanks!

    https://github.com/mthom/scryer-prolog/issues/634#issuecomment-4003451420

src/toplevel.pl

index 9c0ad643b0144473ad84e17b0431b90f06aaa1a0..465c37c08e9ea512d3c23441ff0e7a89fb425ec7 100644 (file)
@@ -251,11 +251,40 @@ gather_clauses_(Stream, File, Clauses) :-
               (   Error = error(syntax_error(incomplete_reduction),_),
                   at_end_of_stream(Stream) ->
                   true
-              ;   format("~s: ~q", [File,Error])
+              ;   format("~s: ~q~n", [File,Error])
               )),
         (   Continue == true ->
-            Clauses = [Clause|Rest],
-            gather_clauses_(Stream, File, Rest)
+            (   var(Clause) ->
+                format("~s: variable clause is ignored.~n", [File]),
+                gather_clauses_(Stream, File, Clauses)
+            ;   Clause = (?- _Query) ->
+                devour_answer_descriptions(Stream, File, Clauses)
+            ;   Clauses = [Clause|Rest],
+                gather_clauses_(Stream, File, Rest)
+            )
+        ;   Clauses = []
+        ).
+
+
+devour_answer_descriptions(Stream, File, Clauses) :-
+        catch((read(Stream, Clause),
+               Continue = true),
+              Error,
+              (   Error = error(syntax_error(incomplete_reduction),_),
+                  at_end_of_stream(Stream) ->
+                  true
+              ;   format("~s: ~q~n", [File,Error])
+              )),
+        (   Continue == true ->
+            (   var(Clause) ->
+                format("~s: variable clause is ignored.~n", [File])
+            ;   Clause = (?- _Query) ->
+                devour_answer_descriptions(Stream, File, Clauses)
+            ;   loader:answer_description(Clause) ->
+                devour_answer_descriptions(Stream, File, Clauses)
+            ;   Clauses = [Clause|Rest],
+                gather_clauses_(Stream, File, Rest)
+            )
         ;   Clauses = []
         ).