Примечание: в этом ответе используется SWI-Prolog.
Как мне прочитать входные данные пользователя относительно проблемы?
Вы делаете это уже сread(X)
, однако read / 1 читает термины (термины заканчиваются точками), и вы, вероятно, захотите прочитать символы.Если вы используете SWI-Prolog, обратите внимание на Примитивный ввод / вывод символов для чтения символов и Предикаты, которые работают со строками для чтения строк.
Как применить это в переменной для последующего использования?
При выполнении базовых операций ввода-вывода с пользователем на текстовом уровне REPL - хороший способ начать.Добавление REPL немного сложнее, поэтому я дам вам код.
tellMeYourProblem :-
output_problems,
read_input.
output_problems :-
forall(problem(P),
writeln(P)).
read_input :-
repeat,
read_string(user_input, "\n", "\r\t ", _, Line),
process_input(Line).
process_input(Line) :-
string(Line),
atom_number(Line, N),
integer(N),
do_something_with(Line),
fail.
process_input("quit") :-
write('Finished'), nl,
!, true.
do_something_with(X) :-
writeln(X).
problem('1').
problem('2').
problem('3').
problem('4').
problem('5').
problem('6').
problem('7').
problem('8').
problem('9').
problem('10').
Также в Prolog стиль использует кожух змеи , поэтому tellMeYourProblem
должно быть tell_me_your_problem
.
Обычно в Прологе REPL выполняется с помощью -> / 2 , ( Чтение ввода до оператора выхода Prolog ), но я изменил это, чтобы добавить больше охранник заявления, чтобы сработало условие выхода, например,
string(Line),
atom_number(Line, N),
integer(N)
или установка охранника в голову, например,
process_input("quit")
При выполнении ввода / вывода дляНа экране и на клавиатуре предполагается использовать stdIn
и stdOut
, но для клавиатуры SWI-Prolog вместо этого использует user_input
.См .: Вход и выход
После того, как весь код пластины котла для REPL - это следующая часть, которую вы ищете, это что-то сделать с входным значением, в этом случае просто распечатайте его.
do_something_with(X) :-
writeln(X).