Добавление строк в списки в прологе
Я новичок в Прологе, и у меня уже есть некоторые проблемы, чтобы понять, дело в том, что я тестировал добавление некоторых строк, представленных консолью:
append_str([],Adder,Adder).
append_str([Head|Tail],Adder,Result):-
append_str(Tail,[Head|Adder],Result).
sread_str(String):-
read(String),
atom(String).
sinput:-
sinput_str([]).
sinput_str(Lista):-
sread_str(String),
sinput_str([String|List]).
sinput_str(List):-
append_str(List,[],Result),
nl,
display(Result),
nl.
И в конечном итоге всегда получаю этот вывод:
|-? sinput.
sinput.
hello.
hello.
world.
world.
9.
9.
'.'(hello,'.'(world,[]))
Номер только для того, чтобы консоль перестала запрашивать еще несколько значений, я не знаю, что не так, спасибо вам, ребята, заранее.
1 ответ
Вы должны попытаться понять, что происходит, когда вы вводите число, что приводит к сбою sread_str.
Пролог исследует все доступные альтернативы для достижения поставленной цели, и, таким образом, изменяет переменные, отменяя такие изменения при неудачном завершении пути. Такая модель усложняется побочными эффектами, необходимыми для ввода-вывода (встроенные функции чтения / отображения).
Затем попытайтесь сначала получить работающий sinput_str, что-то вроде этого
sinput_str([String|List]):-
sread_str(String),
sinput_str(List).
sinput_str([]).