小编Ber*_*rnd的帖子

Haskell:重复一个函数很多次而没有stackoverflow

作为Haskell的新手,我试图多次迭代一个函数(例如,逻辑映射).在命令式语言中,这将是一个简单的循环,但在Haskell中,我最终会出现堆栈溢出.以此代码为例:

main  = print $ iter 1000000

f x = 4.0*x*(1.0-x)

iter :: Int -> Double
iter 0 = 0.3
iter n = f $ iter (n-1)
Run Code Online (Sandbox Code Playgroud)

对于少量迭代,代码可以工作,但是对于一百万次迭代,我得到了堆栈空间溢出:

Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样.这里的尾递归应该没问题.也许问题是懒惰的评价.我尝试了几种方法来强制进行严格的评估,通过插入$!seq在不同的位置,但没有成功.

什么是Haskell迭代函数很多次的方法?

我已经尝试过相关帖子的建议:这里这里,但我总是以堆栈流程结束大量的迭代,例如main = print $ iterate f 0.3 !! 1000000.

stack-overflow haskell

11
推荐指数
1
解决办法
3564
查看次数

Julia中自我指代不可变类型的生成

Julia lang文档解释了如何使用内部构造函数和new()函数构造自引用对象:

  type SelfReferential
      obj::SelfReferential
      SelfReferential() = (x = new(); x.obj = x)
    end
Run Code Online (Sandbox Code Playgroud)

但是,该方法不适用于不可变类型,因为它实质上使用了未完全初始化的实例x的突变。

如何在Julia中生成自引用不可变对象?

julia

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

标签 统计

haskell ×1

julia ×1

stack-overflow ×1