Я хочу прочитать имя пользователя и отобразить его с большой буквы, я сделал что-то подобное.
notice:-
write('Hi whats ur name?'), nl,
read_line_to_codes(user_input,Codes1),
capitalize(Codes1,Codes2)
->
atom_codes(Name,Codes2),
write(Name).
capitalize([],[]).
capitalize([H1|T], [H2|T]):-
code_type(H2, to_upper(H1)).
Кажется, я не понимаю, в чем проблема, например, user_input пуст и без чтения.
Что еще более странно, этот, кажется, работает хорошо ...
notice:-
write('Hi whats ur name?'), nl,
read(Name),
write(Name).





Как именно вы запускаете этот код, чтобы проверить его?
Первая версия вашего кода у меня отлично работает в оболочке SWI-Prolog:
?- notice.
Hi whats ur name?
|: isabelle
Isabelle
true.
Он также отлично работает, когда запускается как «отдельная» программа:
$ swipl -s foo.pl -q -t notice
Hi whats ur name?
|: isabelle
Isabelle
(Хотя вы должны добавить новую строку после вывода.)
Проблема все еще здесь, может быть, это связано с более ранним выбором пути?
read/1 - это очень разные из read_line_to_codes/2. Используйте нетread/1, если вы не понимаете, как его использовать. (Он хочет прочитать термин, оканчивающийся точкой. Это почти наверняка не то, что вам нужно.) Удалите read/1 из вашего вопроса, перепишите его в терминах read_line_to_codes/2 и поместите свой фактический код в свой вопрос, иначе мы не сможем его проверить.
Это немного упрощенная версия моего настоящего уведомления. меню: - написать ('Choose ur path'), nl, read (X), nl, menul (X). меню (1): - старт. начало: - обратите внимание.