Как я могу поймать вывод на консоль в Прологе, чтобы проверить это? - PullRequest
1 голос
/ 18 января 2020

Предположим, у меня есть hello_name.pl:

greeting (Name): -
   write ('hello'),
   write (Name),
   writeln ('!').

И я хочу добавить в свой блокнот что-то вроде

catch_output (greeting ('Moncho'), ConsoleOutput),
  assertion ('hello Moncho!' =:= ConsoleOutput).

1 Ответ

3 голосов
/ 19 января 2020

Если вы используете

См .: with_output_to / 2

Примечание: with_output_to / 2 реализовано с использованием C в SWI-Prolog, поэтому не переносим как код Prolog.

?- with_output_to(string(Output),(write('hello'),write('Rusian'),write('!'))), 
   assertion( Output == "helloRusian!").

С исправлениями в вашем коде и использованием модульных тестов SWI-Prolog

greeting(Name) :-
   write('hello'),
   write(Name),
   writeln('!').

:- begin_tests(your_tests).

test(001, Output == 'helloMoncho!\n') :-
    with_output_to(atom(Output), greeting('Moncho')).

:- end_tests(your_tests).
...