mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-22 04:43:53 +00:00
extras/windows_installer_generator/sample/images/Exclam.ico:
extras/windows_installer_generator/sample/images/Info.ico:
extras/windows_installer_generator/sample/images/banner.bmp:
extras/windows_installer_generator/sample/images/bg.bmp:
samples/solutions/all_solutions.m:
samples/solutions/some_solutions.m:
These files had their execute bit set unnecessarily.
53 lines
1.5 KiB
Mathematica
53 lines
1.5 KiB
Mathematica
% An example program to illustrate the use of the `do_while'
|
|
% predicate in Mercury. This program calls a nondeterministic
|
|
% predicate hello/1, prints the first solution it finds, and
|
|
% then asks the user if they want any more solutions;
|
|
% if they do, it finds another solution, prompts the user again,
|
|
% and so on. It stops when there are no more solutions or
|
|
% when the user says no to the "More?" prompt.
|
|
%
|
|
% Note that in the standard "commutative" semantics, the order of
|
|
% solutions is unspecified. If you want to force the order of
|
|
% evaluation, then you would need to use the "strict sequential semantics"
|
|
% (enabled by the `--strict-sequential' option to the Mercury compiler).
|
|
|
|
% This source file is hereby placed in the public domain. -fjh (the author).
|
|
|
|
:- module some_solutions.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is cc_multi.
|
|
|
|
:- implementation.
|
|
:- import_module bool.
|
|
:- import_module char.
|
|
:- import_module list.
|
|
:- import_module solutions.
|
|
|
|
main(!IO) :-
|
|
do_while(hello, get_next, !IO),
|
|
io.write_string("No (more) solutions\n", !IO).
|
|
|
|
:- pred hello(string::out) is multi.
|
|
|
|
hello("Hello, world\n").
|
|
hello("Good day, world\n").
|
|
hello("Greetings, world\n").
|
|
|
|
:- pred get_next(string::in, bool::out, io::di, io::uo) is det.
|
|
|
|
get_next(String, More, !IO) :-
|
|
% print the first answer
|
|
io.write_string(String, !IO),
|
|
|
|
% see if the user wants more answers
|
|
io.write_string("More? ", !IO),
|
|
io.read_line(Line, !IO),
|
|
( if Line = ok([FirstChar|_]),
|
|
char.to_upper(FirstChar, 'Y')
|
|
then More = yes
|
|
else More = no
|
|
).
|
|
|