问题标签 [starray]

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 回答
553 浏览

haskell - STArray 和堆栈溢出

我很难理解为什么以下在 STArray 中查找最小元素的尝试在使用ghc(7.4.1,无论 -O 级别)编译时会导致堆栈空间溢出,但在以下情况下工作正常ghci

注意:切换到STUArrayorST.Lazy似乎没有任何效果。

STArray但主要问题是:在 big while inside上实现这种“折叠式”操作的正确方法是什么ST

0 投票
1 回答
192 浏览

arrays - 在数据结构中有 ST(U)Arrays?

我必须做什么才能让 GHC 接受此代码:

我得到的错误如下:

但是,这很好用:

为什么它适用于第二个而不是第一个?我可以如何处理数据声明以使其工作?或者我可以在实例声明中添加某种“forall”吗?

以上只是一个最小的测试程序。实际上,我永远循环应用以创建输出值的无限流。(所以我不能只是将这两个步骤合并在一起。)而且我真的希望能够为 ArrGen 数据类型实例化一次,然后使用这些 STArray 算法为其生成各种值。

编辑:

没想到将 forall 放在 ArrGen 的函数中(我把它放在整体类型上)。虽然现在我遇到了让它在 STUArray 上工作的问题。就像我使用以下内容一样:

然后这失败了:

它抱怨:

尽管上下文 (HasSTU a) 说(在我看来)所有 s 都有一个 (MArray (STUArray s) a (S.ST s)) 上下文,但它似乎并不这么认为。我试图通过更改(AU a)类型来修复它:

它似乎输入检查,但我无法实际使用它。同样,如果我更改为:

但是当我尝试运行某些东西时:

我讨厌这个!为什么?我有所有s 的实例!而且我真的很迷茫,不知道我应该把我的foralls放在哪里以及到底发生了什么。

0 投票
1 回答
120 浏览

haskell - Multiple updates in ST-Monad

I want to learn using the ST-Monad. Therefore I want to rewrite a bit of code computing for every integer – up to a limit – the list of all its proper divisors. The result should be an array and the entry of index 'n' should be the list of it's proper divisors.

It is done by computing for each Integer 'n' a list 'l' of its multiples and adding for each multiple 'm' out of 'l' at the index 'm' it's divisor 'n' to the list.

Here's the code I want to modify:

And that's the way how I try it:

in runSTArray result

Unfortunatley it is not compiling and the error message doesn't say anything to me. I have two questions:

  1. Why doesn't it compile? How can I extract the entry correctly?
  2. How would an experienced Haskell-Programm solve this problem under the restriction that he has to work with the ST-Monad (for efficiency purposes)

EDIT: Compiler message

Failed, modules loaded: none.

0 投票
1 回答
172 浏览

arrays - 如何通过 1)使用数组,2)避免列表连接(惰性列表?)来改进此算法?

我试图了解 STArray 的工作原理,但我做不到。(Doc很差,或者至少是我找到的那个)。

无论如何,我有下一个算法,但它使用了很多!!,这很慢。如何将其转换为使用 STArray monad?

编辑

哎呀,!!不是问题;在算法的下一个版本(如下)中,我删除了 !! 的使用;另外,我将 1 固定为素数,正如@pedrorodrigues 所指出的那样

现在这个问题实际上是关于 2 个问题:

1.- 如何将此算法转换为使用数组而不是列表?(是为了学习如何在 Haskell 中处理状态和数组)有人已经在评论中回答了,但指向一个不太好的解释示例。

2.- 每次找到新素数时如何消除列表的串联?

真 -> primesAcum++[当前]

0 投票
3 回答
382 浏览

scalaz - 如何在没有副作用的情况下在 Scala 中实现 Fisher-Yates shuffle?

STArray我想通过使用局部突变效果和功能随机数生成器来实现没有副作用的 Fisher-Yates 算法(就地数组洗牌)

产生算法所需的随机整数。

我有一种方法def intInRange(max: Int): RNG[Int]可以用来Int在 [0,max) 中产生随机数。

来自维基百科

我想我需要以某种方式堆叠StateST但这让我感到困惑。我需要一个[S]StateT[ST[S,?],Seed,A]吗?我是否也必须重写RNG才能使用StateT

(编辑)我不想参与IO,也不想替代VectorSTArray因为洗牌不会就地执行。

我知道这里有一个 Haskell 实现但我目前无法理解并将其移植到 Scalaz。但也许你可以?:)

提前致谢。

0 投票
1 回答
265 浏览

haskell - Haskell ST Monad:没有(MArray(STArray s)Int(ST s1))的实例

过去一两个月我一直在学习 Haskell,最近解决了这个编码问题。额外的挑战是在没有额外空间和线性时间的情况下完成任务,我认为这不可能以纯粹的功能方式完成,所以我自然而然地发现了 ST monad,我认为这将是一个很好的机会了解更多信息。无论如何,这是我写的代码:

这个想法是使用 1 ≤ a[i] ≤ n 的前提条件,并且每个元素最多出现 2 次。但是代码给了我以下错误。

我希望有人能指出我正确的方向!

0 投票
1 回答
74 浏览

arrays - 使用 STArray 的两个几乎相同的函数:为什么一个需要 FlexibleContexts,而另一个不需要?

考虑 Haskell 函数

第一个需要 FlexibleContexts 在 ghci 8.10.1 上编译,第二个编译没有额外的选项。为什么?

s特别欢迎根据类型变量的范围解释这种行为的答案。作为后续,可以将什么(如果有)类型签名添加到函数中以在没有 FlexibleContexts的情况下f进行编译?test最后,与单态限制有联系吗?