问题标签 [state-monad]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
995 浏览

haskell - Haskell 中不再有状态单子版本的哈希映射/集?

哈希集和映射的单子接口在 Haskell 中消失了吗?使用现代版本时,我应该记住什么样的性能模型?(Data.Map、Data.HashMap、Data.HashSet)。在我拥有的版本(ghc 7.0.2)中,它们似乎没有任何 IO 代码,

0 投票
3 回答
1130 浏览

data-structures - Haskell 中使用 State-Monad 的类集方法

我最近看了 Haskell 的 Monad - State。我已经能够创建与这个 Monad 一起操作的函数,但是我试图将行为封装到一个类中,基本上我试图在 Haskell 中复制这样的东西:

如果有人能提供帮助,我将不胜感激。谢谢!

0 投票
2 回答
337 浏览

haskell - 如何将 CheckingFuelMonad 与 Hoopl 中的 State monad 结合起来?

我正在使用Hoopl库,并希望在重写时携带一些状态。重写函数对于所使用的 monad 是多态的,但我无法弄清楚如何将Statemonad 与库的 monad 之一结合起来Fuel

下面是一个最小的例子。MyMonad是 Hoopl'sCheckingFuelMonadState携带旗帜的单子的同义词。Stmt只是我的中间语言的占位符,并不重要。

但这不会编译——GHC 抱怨rewrite类型错误:

我想做的事可能吗?如何rewrite正确编写函数?

0 投票
1 回答
441 浏览

haskell - runState inside a State Monadic function not working

I am trying to solve the problem 2.8 of "AI - A Modern Approach" book which involves a grid of cells and choosing random moves to navigate the grid.

2.7 Implement an environment for a n X m rectangular room, where each square has a 5% chance of containing dirt, and n and m are chosen at random from the range 8 to 15, inclusive.

2.8 Design and implement a pure reflex agent for the environment of Exercise 2.7, ignoring the requirement of returning home, and measure its performance.

So I have used two state monads - one with Grid as the state and another with StdGen as the state. The code compile without any error but when I run it from GHCi, it gets stuck and does not return.

The relevant part of the code:

Supporting code

Main code

I invoke the simulateOnGrid function from GHCi like this:

and code gets stuck at the line:

which I have confirmed by putting traces in the code. The call to the doAction function never happens.

The issue seems to be the use of runState inside the runCleaner function, but I am unable to find any reason for it.

Please explain the reason and if there is a way to solve this issue.

Also, using runState inside the a monadic function feels wrong to me. Please suggest if there is a better way to do it.

0 投票
2 回答
484 浏览

haskell - 复杂状态单子结构

我仍然是 Haskell 的新手,我想我现在已经不知所措了。我的代码如下所示。

我的重点(现在忽略函数中的错误情况)是能够将 (<=>) 和 (<+>) 等函数链接在一起,假设底层数据类型实现了函数所需的接口。

我觉得我可以用 state monad 清理很多,但我不确定如何构造它以允许更改实现 IntStack、BoolStack 等的任何数据类型。

我知道这是一个非常模糊的描述,但我觉得我上面的代码可能是绝对错误的方法。

感谢您的任何反馈!

0 投票
3 回答
13733 浏览

scala - Scalaz 状态单子示例

我还没有看到很多scalaz state monad的例子。有这个例子,但很难理解,而且似乎只有另一个关于堆栈溢出的问题。

我将发布一些我玩过的例子,但我欢迎更多的例子。另外,如果有人可以提供有关为什么使用 , 和 的示例init,那就modify太好了。putgets

编辑:是关于状态单子的精彩 2 小时演示。

0 投票
1 回答
1378 浏览

scala - scalaz List[StateT].sequence - 找不到参数 n 的隐式值:scalaz.Applicative

我试图根据对我的Scalaz 状态单子示例答案的评论来弄清楚如何使用StateT组合两个状态转换器。State

看来我已经很接近了,但是在尝试申请时遇到了问题sequence

所以我得到了一个StateT[StateMap, Random, Int]我可以用初始随机和空地图状态展开的:

现在我想生成一个列表StateT并使用sequence,以便我可以调用list.sequence ! new Random(1L) apply Map[Int,Int](). 但是当我尝试这个时,我得到:

任何的想法?我可以在最后一段时间使用一些帮助 - 假设它是可能的。

0 投票
5 回答
8099 浏览

haskell - ST Monad == 代码味道?

我正在努力在 Haskell 中实现UCT算法,这需要大量的数据处理。无需过多详细介绍,它是一种模拟算法,在每个“步骤”中,根据一些统计属性选择搜索树中的一个叶节点,在该叶上构造一个新的子节点,并对应于新叶子及其所有祖先都已更新。

考虑到所有这些杂耍,我还不够敏锐,无法弄清楚如何使整个搜索树成为一个不错的不可变数据结构 à la Okasaki。相反,我一直在玩弄STmonad,创建由 mutable 组成的结构STRef。一个人为的例子(与 UCT 无关):

显然,如果不使用 ,这个特定的示例会更容易编写ST,但希望很清楚我将在哪里使用这个......如果我要将这种风格应用于我的 UCT 用例,那是不是走错路了?

几年前有人在这里问过类似的问题,但我认为我的问题有点不同......我在适当的时候使用 monad 封装可变状态没有问题,但正是“适当的时候”子句让我着迷。我担心我会过早地回到面向对象的心态,我有一堆带有 getter 和 setter 的对象。不完全是惯用的 Haskell ......

另一方面,如果它对于某些问题来说一种合理的编码风格,我想我的问题就变成了:是否有任何众所周知的方法来保持这种代码的可读性和可维护性?我对所有显式的读取和写入感到有点恶心,尤其是不得不从monadSTRef内部的基于 my 的结构转换为ST外部的同构但不可变的结构。

0 投票
2 回答
1503 浏览

haskell - Haskell:在State中迭代,如何强制我想要的行为?

这是我在 SO 上的第一篇文章,而且我对 Haskell 还比较陌生,所以请原谅任何失误或者我的代码不是惯用的!

考虑以下两个直观的描述:a, f(a), f(f(a))...

A. 一个列表,包含:a、f 对 a 的应用、f 对那个的应用、f 对那个的应用……

B. 一个列表,在第 i 个位置包含 f 到 a 的 i 个嵌套应用程序。

我的问题是我试图使用iterateHaskell 中的函数来做A被烧毁了。我的真实应用程序是一个模拟,但下面的人为示例突出了这个问题。

有了这些定义,

结果是:

显然,iterateB,而不是A!因为该step函数只会在输入列表中添加一些内容,所以无论状态如何,step ["foo"]都不可能导致!["bar", "bar"]

让我说我确实理解这里发生了什么,而且 - 正式 - 结果正是“应该是”:step是一个有状态的函数,所以当 f(a) 作为 f( f(a)),它将被重新计算,而不是从第二个列表项中取出,因为状态已经改变。我也意识到我可以通过将我的累积列表放入状态中来避免在我的实际应用程序中发生这种情况。

尽管如此,发布此内容有两个原因。

首先,重点iterate是经常以一种可能误导初学者认为它是A的方式来解释它,而实际上它是B。这包括Learn You A Haskell(否则我发现它非常有用),但也可以在 SO 上发布(例如, herehere)。事实上,iterateLYAHFGG 中的口头解释几乎就是上面的定义A。因此,在此发布一个帖子可能是有用的,作为其他 Haskell 新手的资源,他们因此而遇到错误并正在寻找解释(所以一定要发布更准确、技术性、措辞更好的澄清A和A的区别B下)。

其次,我仍然会对是否有一个实际上会执行A的函数感兴趣!换句话说,在上面的有状态示例中,我如何生成列表(稍微滥用符号):[a, b = f(a), f(b), ...]?换句话说,给定

为此

产生预期的结果

我怎样才能重写example2使用iterate

在初学者 Haskell 列表中,发布了一个有关记忆版本的相关问题iterate。但是,该查询似乎没有收到答案。

我不完全确定懒惰真的是我的应用程序中的问题。一个严格的版本会iterate做我想要的吗?我自己的,天真的,如下所示的“严格迭代”似乎没有任何区别。

任何有关这一切的见解将不胜感激!

0 投票
3 回答
1326 浏览

haskell - “实例显示状态”无法编译

这是我试图弄清楚的状态单子代码

我正在尝试将 State 作为 Show 的实例,以便我可以看到ghci 提示符的动作getState和动作。putState count

任何指向 State Monad 材料的教程或链接也会很好。