swi-prolog:在编译程序中输入用户之前删除'|:'

时间:2015-05-31 18:50:10

标签: prolog swi-prolog

每当我使用swi-prolog编译任何内容时,它会在用户输入之前添加|:来表明你应该写一些东西,这很好,但是我需要将这个程序的输出传递给另一个程序,最好没有|:

我的编译选项是:

swipl -nodebug -g true -O -q --toplevel=quiet --stand_alone=true -o main -c main.pl

1 个答案:

答案 0 :(得分:3)

你需要说

prompt(_, '')
在开始阅读和编写标准流之前,在程序中的某处。来自entry for prompt/2

  

如果调用了其中一个读取谓词并且光标位于左边距,则会打印提示。每当给出换行符并且该术语尚未终止时,也会打印它。只有当前输入流是用户时才会打印提示。

上面的调用只是将提示设置为空原子(忽略之前的提示)。例如,使用以下prompt.pl

:- current_prolog_flag(verbose, silent).
:- use_module(library(readutil)).

main :-
    read_line_to_codes(user_input, Line),
    format("~s~n", [Line]),
    halt.
main :- halt(1).

然后:

$ swipl -q --goal=main -o prompt -c prompt.pl
$ ./prompt
|:foobar
foobar
$
:- current_prolog_flag(verbose, silent).
:- use_module(library(readutil)).

main :-
    prompt(_, ''),
    read_line_to_codes(user_input, Line),
    format("~s~n", [Line]),
    halt.
main :- halt(1).

它消失了:

$ swipl -q --goal=main -o prompt -c prompt.pl
$ ./prompt
foobar
foobar
$

如果您添加了与我的第一版prompt.pl类似的程序以及结果输出,那么更多人可能更容易理解您的具体要求。