2017-04-17 96 views
-1

在我的代码中,似乎所有readln语句都是在单个write完成之前执行的。 我的代码:swi prolog在任何写入之前执行所有readln

go :- readln(A), write(A), readln(B), write(B). 

它目前的运行方式

? go. 
|: foo 
bar 
[foo][bar] 
true. 

但我想

? go. 
|: foo 
[foo] 
bar 
[bar] 
true. 

任何想法可能会导致行为,以及如何去改变它?

+1

什么readln? – CapelliC

+0

@CapelliC它是在swi-prolog中预定义的http://www.swi-prolog.org/pldoc/doc/swi/library/readln.pl – litelite

+1

是的,它已被弃用和无文档...更好使用read_line_to_codes/2 – CapelliC

回答

0

由于@CapelliC建议:

?- listing(go). 
go :- 
    read_line_to_codes(user_input, A), 
    format("~s~n", [A]), 
    read_line_to_codes(user_input, B), 
    format("~s~n", [B]). 

true. 

?- go. 
| foo 
foo 
| bar 
bar 
true.