首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理stdin闭包

处理stdin闭包
EN

Stack Overflow用户
提问于 2017-08-15 11:03:36
回答 1查看 293关注 0票数 1

下面的方法似乎不起作用,但我不太确定原因。move-board所做的只是接受一个二维数组并返回一个二维数组,其余的代码都在那里。基本上,我正在尝试完成类似以下python的工作:

代码语言:javascript
复制
While True:
  do stuff
  if gameover:
    print("Game Over!")
    break

不工作的Clojure (打印板一次,请求输入,然后挂起)

代码语言:javascript
复制
(defn game-loop [board]
  (loop [b board]
    (if (game-over? b) "Game Over!"
        (do (print-board b)
            (recur (move-board (read-line) b))))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-15 12:45:52

我们需要看看你的其他函数在做什么。我将它们编成最小的可能性,并重新压缩以使if分支更清晰。你的loop也是不必要的。

代码语言:javascript
复制
(defn game-over? [b] false)
(defn print-board [b] (println b))
(defn move-board [ln b] (println "moving board:" ln))

(defn game-loop [b]
  (if (game-over? b)
    "Game Over!"
    (do (print-board b)
        (recur (move-board (read-line) b)))))

(game-loop :bored)

有了这三个前三个函数,您的循环就会按预期运行:无限地提示一行。好吧,至少是第一次,但之后你的“挂起”问题就会重现。

这很可能是由this issue with the JVM引起的。还有discussed here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45685927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档