[Prolog] czytanie inputu użytkownika.

0

Cześć!

Chcę przeczytać imię użytkownika i wyświetlić je w aplikacji tak żeby było ono z dużej litery, problem w tym, że to co stworzyłem:

notice:-
    write('Czesc jak masz na imie?'), nl,
    read_line_to_codes(user_input,Codes1),
    capitalize(Codes1,Codes2)
    ->
    atom_codes(Imie,Codes2),
    write(Imie).

samo w sobie działa, ale gdy chcę użyć w aplikacji - takiej, że użytkownik wpisuje coś już wcześniej i dopiero potem ma wpisać swoje imię wydaje się, że omija krok czytania- read_line_to_codes.

Dodam, że

notice:-
    write('Czesc jak masz na imie?'), nl,
    read(Imie),
    write(Imie).

działa...

Ktoś ma jakiś pomysł?

0

Zapomniałem dorzucić:

capitalize([],[]).
capitalize([H1|T], [H2|T]):-
    code_type(H2, to_upper(H1)).
0

Okazało się, że predykat notice jest poprawny, a cały zamęt czynił predykat read/1 (potrzebuje on być zakończony kropką) który występował przed. Prawdopodobnie menul(X) pobierało tylko i wyłącznie 1 a '.'-kropka lądowała w predykacie read_line_to_codes czyniąc zamęt.

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)).

menu:- 
write('Choose ur path'),
    nl, read(X), 
    nl, menul(X).
menul(1):- start.

start:- notice.

Moje rozwiązanie problemu(prawdopodobnie najbrzydziej jak się da, jednak mi wystarczy :))

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)).

menu:- 
    write('Choose ur path'), 
    nl, read_line_to_codes(user_input,MenuCodes),
    string_codes(MyString,MenuCodes),
    atom_number(MyString,Choice),
    menul(Choice). 

menul(1):- start. 
start:- notice.

1 użytkowników online, w tym zalogowanych: 0, gości: 1