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

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

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

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


person mark_limpkin    schedule 30.03.2011    source источник


Ответы (1)


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

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'].
person Kaarel    schedule 30.03.2011