Добавление строк в списки в прологе

Я новичок в Прологе, и у меня уже есть некоторые проблемы, чтобы понять, дело в том, что я тестировал добавление некоторых строк, представленных консолью:

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([]).
Другие вопросы по тегам