Prolog-程序跳过读取?
标题或多或少说明了一切。我在SWI-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
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中,如下所示”,等等。