Проверка числа на вхождение в интервал - Prolog
Формулировка задачи:
Здравствуйте!
Учу Пролог. Пишу в SWI-prolog editor.
Помогите с таким заданием:
Процедура при первом обращении спрашивает имя пользователя, при втором - числовой интервал, в дальнейшем - запрос числа, которое сохраняется, если принадлежит интервалу. По команде создается терм, содержащий имя и список цифр, которые были введены, а потом все начинается снова.
Написал часть проги, которая работает в цикле - сначала вводим имя, потом интервал, потом число. Думаю делать все с файлом - в нем будут сохраняться введенные цифры. Дальше не знаю как делать.. Помогите с решением. Спасибо!
Решение задачи: «Проверка числа на вхождение в интервал»
textual
Листинг программы
% SWI-Prolog
:- set_prolog_flag(double_quotes, string).
:- dynamic([usr/1, int/1, num/1, out_term/2]).
p :-
\+ usr(_),
write("Введите имя пользователя: "),
read(UserName),
assertz( usr(UserName) ),
fail.
p :-
\+ int(_),
write("Введите интервал: "),
read(Low-High),
assertz( int(Low-High) ),
fail.
p :-
\+ int(_),
p.
p :-
write("Введите число, команду term или quit: "),
read(X),
\+ p(X),
!.
p :-
p.
p(quit) :-
p(term),
write("Сессия завершена."),
!,
fail.
p(term) :-
usr(UserName),
findall(Num, num(Num), Nums),
assertz( out_term(UserName, Nums) ),
write("Сформирован терм: "),
writeln( out_term(UserName, Nums) ),
retractall( usr(_) ),
retractall( int(_) ),
retractall( num(_) ),
!.
p(X) :-
integer(X),
int(Low-High),
between(Low, High, X),
assertz( num(X) ),
!.
p(_).
Объяснение кода листинга программы
В этом коде используется язык программирования Prolog. Вот список действий, которые выполняются в этом коде:
- Установка флага double_quotes для обработки строк с использованием двойных кавычек.
- Создание динамической области памяти для переменных usr, int, num, out_term.
- Основной цикл программы, который продолжается до тех пор, пока пользователь не введет «quit».
- Если пользователь вводит «usr», запрашивается имя пользователя и сохраняется в переменной UserName.
- Если пользователь вводит «int», запрашивается интервал и сохраняется в переменной Low-High.
- Если пользователь вводит «num», запрашивается число и сохраняется в переменной X.
- Если пользователь вводит «term», выводится сформированный терм, состоящий из имени пользователя и чисел, и завершается сессия.
- Если пользователь вводит «quit», выводится сообщение «Сессия завершена».
- Если пользователь вводит что-то, что не является «usr», «int», «num», «term» или «quit», программа продолжается.
- Если пользователь вводит «term», выводится сообщение «Неверный ввод».
- Если пользователь вводит число X, проверяется, находится ли оно в заданном интервале, и если да, то число X сохраняется в переменной Num, и формируется терм, состоящий из имени пользователя и чисел, и выводится на экран.
- Если пользователь вводит «quit», «term» или что-то еще, что не является числом, программа продолжается.
- Если пользователь вводит число X, которое не находится в заданном интервале, программа продолжается.
- Если пользователь вводит «quit», «term» или что-то еще, программа завершается.