Merge pull request #1485 from triska/in_character

Implement and use can_be(in_character, ...)
This commit is contained in:
Mark Thom
2022-05-22 19:52:19 -06:00
committed by GitHub
2 changed files with 11 additions and 2 deletions

View File

@@ -1366,12 +1366,12 @@ char_code(Char, Code) :-
). ).
get_char(C) :- get_char(C) :-
error:can_be(character, C), error:can_be(in_character, C),
current_input(S), current_input(S),
'$get_char'(S, C). '$get_char'(S, C).
get_char(S, C) :- get_char(S, C) :-
error:can_be(character, C), error:can_be(in_character, C),
'$get_char'(S, C). '$get_char'(S, C).
can_be_number(N, PI) :- can_be_number(N, PI) :-

View File

@@ -28,6 +28,7 @@
- boolean - boolean
- character - character
- chars - chars
- in_character
- integer - integer
- list - list
- term - term
@@ -47,6 +48,7 @@ must_be_(var, Term) :-
must_be_(integer, Term) :- check_(integer, integer, Term). must_be_(integer, Term) :- check_(integer, integer, Term).
must_be_(atom, Term) :- check_(atom, atom, Term). must_be_(atom, Term) :- check_(atom, atom, Term).
must_be_(character, T) :- check_(error:character, character, T). must_be_(character, T) :- check_(error:character, character, T).
must_be_(in_character, T) :- check_(error:in_character, in_character, T).
must_be_(chars, Ls) :- must_be_(chars, Ls) :-
can_be(chars, Ls), % prioritize type errors over instantiation errors can_be(chars, Ls), % prioritize type errors over instantiation errors
must_be(list, Ls), must_be(list, Ls),
@@ -88,6 +90,11 @@ character(C) :-
atom(C), atom(C),
atom_length(C, 1). atom_length(C, 1).
in_character(C) :-
( character(C)
; C == end_of_file
).
ilist(Ls) :- ilist(Ls) :-
'$skip_max_list'(_, _, Ls, Rs), '$skip_max_list'(_, _, Ls, Rs),
( var(Rs) -> ( var(Rs) ->
@@ -99,6 +106,7 @@ type(type).
type(integer). type(integer).
type(atom). type(atom).
type(character). type(character).
type(in_character).
type(chars). type(chars).
type(list). type(list).
type(var). type(var).
@@ -129,6 +137,7 @@ can_be(Type, Term) :-
can_(integer, Term) :- integer(Term). can_(integer, Term) :- integer(Term).
can_(atom, Term) :- atom(Term). can_(atom, Term) :- atom(Term).
can_(character, T) :- character(T). can_(character, T) :- character(T).
can_(in_character, T) :- in_character(T).
can_(chars, Ls) :- can_(chars, Ls) :-
( '$is_partial_string'(Ls) -> true ( '$is_partial_string'(Ls) -> true
; can_be(list, Ls), ; can_be(list, Ls),