【发布时间】:2020-09-02 02:03:07
【问题描述】:
标题或多或少说明了一切。我在 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 很陌生,所以请耐心等待,但这就是我的看法:它似乎“跳过”了我们的 read,现在期待输入一个新命令(上图中已按下 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 提供任何类型的输入都会导致手头的问题。
【问题讨论】:
-
右括号后面有点吗?我无法清楚地看到它...否则:它是学期完成标记所必需的。
-
@Enigmativity 现在会开始,一旦我得到一些东西就更新 OP(但显然应该不会花很长时间)!
-
@CapelliC 有,但是当我按下一个键(在这种情况下,
[)时,Prolog 中的“?-”就会被打印出来,所以现在的问题是我觉得其他的问题. -
您在 Windows 上吗?您实际运行的是哪个程序?我认为有一些长期存在的错误
swipl.exe被破坏并且无法进行正确的输入和输出,并且swipl-win.exe有效:stackoverflow.com/questions/23133168/… 。另外,请使您的描述非常清楚,例如“我将以下代码放入文件foo.pl”,“我将foo.pl加载到SWI-Prolog中,如下所示”等
标签: prolog