相关疑难解决方法(0)

查询Erlang进程的状态?

Erlang中的一个常见模式是维护状态的递归循环:

loop(State) ->
  receive
    Msg ->
      NewState = whatever(Msg),
      loop(NewState)
  end.
Run Code Online (Sandbox Code Playgroud)

有没有办法用bif或跟踪查询正在运行的进程的状态?由于崩溃消息说"......状态是......"并显示崩溃进程的状态,我认为这很容易,但我很失望,因为我无法找到这样做的bif.

那么,我认为使用dbg模块的跟踪就可以了.不幸的是,我相信因为这些循环是尾调用优化的,所以dbg只捕获对该函数的第一次调用.

有解决方案吗

erlang

15
推荐指数
3
解决办法
9999
查看次数

什么可以是用Haskell编写的游戏的最小例子?

三个月后更新

我在下面的回答中使用netwire-5.0.1+ sdl,在使用Arrows和Kleisli Arrows进行I/O的功能反应编程结构中.虽然太简单,不能被称为"游戏",但它应该是非常可组合的并且非常可扩展.

原版的

我正在学习Haskell,并尝试用它制作一个小游戏.但是,我想看看小型(规范)文本游戏的结构.我也尽量保持代码尽可能纯净.我现在正在努力了解如何实施:

  1. 主循环.这里有一个例子如何在Haskell中编写游戏循环?但似乎接受的答案不是尾递归.我不确定这是否重要.据我了解,内存使用量会增长,对吧?
  2. 国家转型.不过,我认为这与第一个问题非常相关.我试了一下State,在http://www.gamedev.net/page/resources/_/technical/game-programming/haskell-game-object-design-or-how-functions-can-get-you中试了一下-apples-r3204,但是虽然单个组件可以在有限的步骤中工作和更新,但我看不出如何在无限循环中使用它.

如果可能的话,我想看一个基本上最小的例子:

  1. 要求玩家反复输入内容
  2. 满足某些条件时,请更改状态
  3. 当满足其他一些意愿时,退出
  4. 理论上可以无限时间运行而不会破坏内存

我没有任何可用的代码,因为我无法获得最基本的东西.我在网上找到的任何其他材料/示例都使用其他一些库,比如SDLGTK驱动事件.我发现在Haskell中完全写的唯一一个是http://jpmoresmau.blogspot.com/2006/11/my-first-haskell-adventure-game.html,但是那个在主循环中看起来不像是一个尾递归(同样,我不知道这是否重要).

或者,可能Haskell不打算做这样的事情?或者我可能应该放入mainC?

编辑1

所以我在https://wiki.haskell.org/Simple_StateT_use中修改了一个小例子,使它更简单(并且它不符合我的标准):

module Main where
import Control.Monad.State

main = do 
  putStrLn "I'm thinking of a number between 1 and 100, can you guess it?"
  guesses <- execStateT (guessSession answer) 0
  putStrLn $ "Success in " ++ (show guesses) ++ " tries."
  where
    answer = …
Run Code Online (Sandbox Code Playgroud)

haskell arrows game-engine frp netwire

5
推荐指数
1
解决办法
1448
查看次数

标签 统计

arrows ×1

erlang ×1

frp ×1

game-engine ×1

haskell ×1

netwire ×1