diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-16 20:09:02 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-16 20:09:02 +0000 |
commit | 3f316c5c9265618fe7095cc39c4cb10909cbe468 (patch) | |
tree | d01a693fd4f19e56a644905848b38aaef4974025 /stdlib.pl | |
parent | 8ef27e2fe652a8b29a8b57589863f2f2b45f9425 (diff) |
Implement a bit more of prolog flag predicates set_prolog_flag/2 and current_prolog_flag/2
Diffstat (limited to 'stdlib.pl')
-rw-r--r-- | stdlib.pl | 57 |
1 files changed, 57 insertions, 0 deletions
@@ -549,3 +549,60 @@ nl :- nl(S) :- put_char(S, ' '). % This should really be \n + +% flags +set_prolog_flag(Flag, Value) :- + is_nonvar(Flag), + is_nonvar(Value), + is_atom(Flag), + is_prolog_flag(Flag), + is_appropriate_flag_value(Flag, Value), + is_modifiable_flag(Flag), + '$set_prolog_flag'(Flag, Value). + +current_prolog_flag(Flag, Value) :- + is_atom_or_var(Flag), + ( atom(Flag) + -> is_prolog_flag(Flag) + ; true + ), + current_prolog_flags(FlagsAndValues), + member(flag(Flag, Value), FlagsAndValues). + +is_prolog_flag(Flag) :- + member(Flag, + [ bounded + , max_integer + , min_integer + , integer_rounding_function + , char_conversion + , debug + , max_arity + , unknown + , double_quotes]), + ! + ; domain_error(prolog_flag, Flag). + +is_modifiable_flag(Flag) :- + member(Flag, [char_conversion, debug, unknown, double_quotes]), + ! + ; permission_error(modify, flag, Flag). + +is_appropriate_flag_value(Flag, Value) :- + appropriate_flag_values(Flag, Values), + member(Value, Values), + ! + ; domain_error(flag_value, Flag + Value). + +appropriate_flag_values(bounded, [true, false]). +appropriate_flag_values(max_integer, [Val]) :- + current_prolog_flag(max_integer, Val). +appropriate_flag_values(min_integer, [Val]) :- + current_prolog_flag(min_integer, Val). +appropriate_flag_values(integer_rounding_function, [down, toward_zero]). +appropriate_flag_values(char_conversion, [on, off]). +appropriate_flag_values(debug, [on, off]). +appropriate_flag_values(max_arity, [Val]) :- + current_prolog_flag(max_arity). +appropriate_flag_values(unknown, [error, fail, warning]). +appropriate_flag_values(double_quotes, [chars, codes, atom]).
\ No newline at end of file |