Добавление переменной в список в прологе - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь выяснить, как добавить имя в список в Прологе, запрашивая у пользователя имя, а затем извлекая этот список из функции, но я не уверен, как добавить работает в этом сценарии:

test:-
    addname(Names),
    write(Names).

addname(Names):-
    write('Enter name followed by . (s. to stop)'),
    read(Name), nl,
    (Name = 's') ->
        true; %% exit procedure
        append(Names, Name, New),
        addname(Names).

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 31 марта 2011

Может быть, что-то вроде этого:

get_names(Names) :-
    writeln('Enter name followed by . (s. to stop)'),
    read(Name), 
    add_name(Name, Names).

add_name(s, []) :- !.

add_name(Name, [Name | Names]) :-
    get_names(Names).

Использование:

?- get_names(Names).
Enter name followed by . (s. to stop)
|: 'John'.
Enter name followed by . (s. to stop)
|: 'Mary'.
Enter name followed by . (s. to stop)
|: s.
Names = ['John', 'Mary'].
...