【问题标题】:Prolog - program skipping over read?Prolog - 程序跳过阅读?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多