Передача возвращенного значения из предиката в другой предикат в Прологе - PullRequest
1 голос
/ 30 января 2020

При запуске только одного предиката, программа правильно обрабатывает пользовательский ввод.

【Код】

main:-
    chooseusertype.

chooseusertype:-
    write('Log in as a merchant or customer?: '),
    read(X),
    format('Your log in type: ~w', [X]).

【Результат выполнения】

Log in as a merchant or customer?: customer.
Your log in type: customer

Однако, когда я пытаюсь передать входные данные, указанные в предикате selectusertype, в startas предикат

【Код】

main(-Usertype):-
    chooseusertype,
    startas(Usertype).

chooseusertype:-
    write('Log in as a merchant or customer?: '),
    read(X),
    format('Your log in type: ~w', [X]).

startas('merchant'):-
    write('Logged in as merchant'), nl,
    write('Any update on the shelves?').

startas('customer'):-
    write('Logged in as customer'), nl,
    write('Let us help you find the ingredients you want!').

【Результат выполнения】

false

Сбой. Я знаю, что синтаксис неправильный, но я не нахожу документацию по Прологу хорошо написанной, и я застрял из-за этого. Как мне это исправить?

1 Ответ

1 голос
/ 30 января 2020

Вы можете изменить main и chooseusertype следующим образом, например, read/1 возвращает выбранный параметр:

main:-
    chooseusertype(Usertype),
    startas(Usertype).

chooseusertype(X):-
    write('Log in as a merchant or customer?: '),
    read(X),
    format('Your log in type: ~w', [X]).

Из SWI документации :

read(-Term) Считайте следующий термин Пролог из текущего входного потока и объедините его с Term

Более того, если вы хотите напечатать сообщение об ошибке, вы можете сделать:

main:-
    chooseusertype(Usertype),
    ( startas(Usertype) -> 
        true; 
        format('~nUser type not recognised: ~w', [Usertype]),
        fail
    ).

?- main.
Log in as a merchant or customer?: asd.
Your log in type: asd
User type not recognised: asd
false.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...