Prolog-程序跳过读取?

Prolog-程序跳过读取?,prolog,Prolog,标题或多或少说明了一切。我在SWI-PROLOG中获得了以下代码: get_card(1):- nb_getval(playerOneHand, Hand), write("Select which cards you want to play:"), nl, read(Input), handle_input(Input). get_card(2):- nb_getval(playerTwoHand, Hand), writ

标题或多或少说明了一切。我在SWI-PROLOG中获得了以下代码:

get_card(1):-
    nb_getval(playerOneHand, Hand),
    write("Select which cards you want to play:"), nl,
    read(Input),
    handle_input(Input).

get_card(2):-
    nb_getval(playerTwoHand, Hand),
    write("Select which cards you want to play:"), nl,
    read(Input),
    handle_input(Input).
目前预期的输入格式类似于
[0,1]。
要玩前两张牌,
[0]。
只玩第一张牌,依此类推。虽然我知道这对于输入格式来说已经不是什么可怕的事情了,但现在的首要任务是至少让它工作起来,然后从那里转向更好的UI

情况就是这样:

我对Prolog非常陌生,所以请耐心听我说,但我是这样看待它的:它似乎“跳过”了我们的
读取
,现在希望输入一个新命令(上图中按了ENTER键)

我觉得解决办法应该很简单,但不幸的是,我似乎什么也想不到。提前谢谢

编辑:可以运行以重现问题的示例代码,除非它只是出于某种原因发生在我的系统上:

% Initialize globals
?- nb_setval(playerOneHand, []).
?- nb_setval(playerTwoHand, []).

handle_input(Input, Hand):-
    write("Input is "), write(Input), nl,
    write("Hand is "), write(Hand), nl.

get_card(1):-
    nb_getval(playerOneHand, Hand),
    write("Select which cards you want to play: "), nl,
    read(Input),
    handle_input(Input, Hand).

get_card(2):-
    nb_getval(playerTwoHand, Hand),
    write("Select which cards you want to play: "), nl,
    read(Input),
    handle_input(Input, Hand).

?- write("Player 1: "), get_card(1), nl,
   write("Player 2: "), get_card(2), nl.

使用SWI Prolog和
test.pl
文件中的给定代码,只需通过终端接口(文件->咨询->
test.pl
)查询即可。尝试向SWI Prolog提供任何类型的输入都会导致手头的问题。

正如Isabelle Newbie在评论中提到的,
swipl.exe(默认启动)有一个与正确输入/输出相关的长期运行错误。导航到安装Prolog的位置,而不是使用
swipl win.exe
似乎成功了。

您能提供一个吗?右括号后面有一个点吗?我看不清楚。。。否则:它是学期完成标记所必需的。@Enigmativity现在就开始了&一旦我得到一些东西,就更新OP(但显然不会花太长时间)@确实有,但是我一按键,Prolog中的“?-”就会被打印出来(在本例中,
[
),所以现在的问题是我感觉的另一个问题。你在Windows上吗?你实际上在运行哪个程序?我认为有一些长期存在的错误,
swipl.exe
被破坏,无法进行正确的输入和输出,
swipl-win.exe
工作:。另外,请把你的描述弄清楚,例如。“我将以下代码放入文件
foo.pl
”,“我将
foo.pl
加载到SWI Prolog中,如下所示”,等等。