]> Repositorios git - scryer-prolog.git/commitdiff
FIXED: can_be(chars, [a,X]), i.e., if variables occur as elements
authorMarkus Triska <[email protected]>
Sat, 14 May 2022 06:09:01 +0000 (08:09 +0200)
committerMarkus Triska <[email protected]>
Sat, 14 May 2022 06:39:20 +0000 (08:39 +0200)
This should simplify 2f3de51e554629d2e7b4ea023c9ef181c240692c and
other cases like it.

src/lib/error.pl

index 68d7d3ee71c6be2f77475b02dc02938a7fed73fa..a7cc4a5a5d09cefb94844aab09f923718697643a 100644 (file)
@@ -128,7 +128,11 @@ can_be(Type, Term) :-
 can_(integer, Term) :- integer(Term).
 can_(atom, Term)    :- atom(Term).
 can_(character, T)  :- character(T).
-can_(chars, Ls)     :- '$is_partial_string'(Ls).
+can_(chars, Ls)     :-
+        (   '$is_partial_string'(Ls) -> true
+        ;   can_be(list, Ls),
+            can_be_chars(Ls)
+        ).
 can_(list, Term)    :- list_or_partial_list(Term).
 can_(boolean, Term) :- boolean(Term).
 can_(term, Term)    :-
@@ -137,6 +141,12 @@ can_(term, Term)    :-
         ;   type_error(term, Term, can_be/2)
         ).
 
+can_be_chars(Var) :- var(Var), !.
+can_be_chars([]).
+can_be_chars([X|Xs]) :-
+        can_be(character, X),
+        can_be_chars(Xs).
+
 list_or_partial_list(Ls) :-
         '$skip_max_list'(_, _, Ls, Rs),
         (   var(Rs) -> true