Как отправить EOF на Prolog swipl REPL в Windows, чтобы закрыть псевдопользовательский файл?

Я использую swipl.exe Prolog REPL в Windows и пытаюсь использовать пользователя псевдофайл, открытый с помощью [user]., но я не могу найти сочетание клавиш, чтобы оставить псевдофайл:

c:\code>swipl.exe
Welcome to SWI-Prolog (threaded, 64 bits, version 8.0.3)

1 ?- [user].
|: hello :- format('Hello world~n').
|: ^Z

.

ERROR: user://1:9:3: Syntax error: illegal_character
|:
Action (h for help) ? ^C
c:\code>

Начиная с ^Z я набрал ключи

  • CTRL+Z
  • ENTER (я ожидал, что здесь должен был быть отправлен EOF)
  • ВВОД
  • .
  • ENTER (это показывает ошибку и возвращает меня в псевдофайл)
  • CTRL+C (это убивает только один из двух процессов swipl, оставляя консоль в сломанном состоянии, при этом некоторые нажатия клавиш отправляются на swipl, а некоторые — на cmd(!))

Я знаю, что в пустой строке нажатие CTRL+Z, а затем ENTER обычно работает для отправки EOF, например, если в more.com я набираю A ENTER B ENTER CTRL+Z ENTER< /kbd> на моем терминале все работает.


Если я запускаю графический интерфейс swipl-win.exe, следуя тем же ключевым шагам, сразу же, когда я нажимаю CTRL+Z, он закрывает псевдофайл и возвращает меня к запросу верхнего уровня:


?- [user].
|: hello :- format('Hello world~n').
|: 
% user://1 compiled 0.00 sec, 1 clauses
true.

?- hello.
Hello world
true.

?- 

Что мне нажать, чтобы [user]. работало в swipl.exe?


person Carl Walsh    schedule 23.11.2019    source источник


Ответы (1)


Как вы заметили, когда вы вводите [user], вы обращаетесь к псевдо-исходному файлу, состоящему из терминов. Поэтому просто введите термин end_of_file. Например:

?- [user].
|: a.
|: b.
|: end_of_file.

% user://1 compiled 0.00 sec, 2 clauses
true.
person Paulo Moura    schedule 23.11.2019