2017-04-17 95 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.