diff --git a/library/prolog_locale.pl b/library/prolog_locale.pl new file mode 100644 index 0000000000..40eab7de48 --- /dev/null +++ b/library/prolog_locale.pl @@ -0,0 +1,67 @@ +/* Part of SWI-Prolog + + Author: Jan Wielemaker + E-mail: jan@swi-prolog.org + WWW: http://www.swi-prolog.org + Copyright (c) 2024, SWI-Prolog Solutions b.v. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +:- module(prolog_locale, + [ setup_prolog_locale/0 + ]). + +/** Tweak the locale for Prolog development +*/ + +%! setup_prolog_locale is det. +% +% This sets up the locale to use Prolog friendly numbers with +% grouping. I.e., after running setup_prolog_locale/0, we get: +% +% ``` +% ?- A is 1<<100. +% A = 1_267_650_600_228_229_401_496_703_205_376. +% ``` + +setup_prolog_locale :- + locale_create(_, default, + [ alias(prolog), + decimal_point('.'), + thousands_sep('_'), + grouping([repeat(3)]) + ]), + set_locale(prolog), + add_write_option(answer_write_options, integer_format('~:d')), + add_write_option(debug_write_options, integer_format('~:d')), + add_write_option(print_write_options, integer_format('~:d')). + +add_write_option(Set, Option) :- + current_prolog_flag(Set, List), + set_prolog_flag(Set, [Option|List]). + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 26dc89de87..1306a270fb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -160,7 +160,7 @@ set(SWIPL_DATA_library explain.pl sort.pl prolog_config.pl prolog_wrap.pl prolog_trace.pl prolog_code.pl intercept.pl prolog_deps.pl tables.pl hashtable.pl strings.pl increval.pl prolog_debug.pl prolog_versions.pl prolog_evaluable.pl macros.pl - prolog_coverage.pl) + prolog_coverage.pl prolog_locale.pl) if(INSTALL_DOCUMENTATION) set(SWIPL_DATA_library ${SWIPL_DATA_library} help.pl) endif()